【问题标题】:How to change dynamically the js code?如何动态更改js代码?
【发布时间】:2012-10-23 08:49:21
【问题描述】:

如何在运行时替换 JS 函数的代码? (与 C++ 函数指针功能相同)

我已经尝试过eval(),但是当其中一个参数包含像 13 或 10 这样的字节值时,它会引发错误。

据我了解,eval 实际上是在评估每个词法原子并用它们的内容替换它们。

这些是一些示例文件来说明我正在寻找的功能:


文件 1:index.html

xmlhttp=new XMLHttpRequest();   
xmlhttp.open("GET","dynamic_code.php",false);
xmlhttp.send();
var dynamic_code=xmlhttp.responseText;
function dynamic_function (){
    eval(dynamic_code)
}
dynamic_function ()

文件 2:dynamic_code.php

some_file=new XMLHttpRequest(); 
some_file.open("GET","some_file.txt",false);
some_file.send();
var some_file_content=some_file.responseText;
alert(some_file_content);

文件 3:some_file.txt

line1
line2
line3

浏览器返回错误:

> Uncaught exception: SyntaxError: at line 2, column 0: expected
> expression, got '<' Error thrown at line 12, column 4 in
> dynamic_function() in http://my_ip/dummy/index.html:
>     eval(dynamic_code) called from line 15, column 0 in http://my_ip/dummy/index.html:
>     dynamic_function ()

【问题讨论】:

  • dynamic_code.php 服务是否正常?尝试在eval之前通过console.logalert输出dynamic_code的内容。
  • 我瘦了,你让它比它应该的更复杂不应该有这样的场景来替换 JS 函数的代码,只需在你的 JS 函数中调用两个或三个部分变量,只需传递这个变量作为响应,你想要的部分就会被激活

标签: javascript ajax dynamic-function


【解决方案1】:

这与 C++ 函数指针的功能不同 :-)

这也是一样的:

function someFunc() {
}

function otherFunc(f) {
    f();
}

otherFunc(someFunc);

而且它有效 :) Javascript 具有一流的功能。 (C++ 用函数指针模拟。)

你想要在 C++ 中做的是这样的:

void someFunc(f) {
    eval(f); // doesn't exist of course
}

someFunc("void otherFunc() {}");

既然真相已经确定,让我们回到你的问题。

您要查找的内容称为JSONP。这是一种在浏览器中注入脚本标签的技术。当脚本被注入时,里面的javascript代码就会被执行。使用它的主要原因是因为它可以跨域工作,因此您不需要 XHR。但您也可以将其用于您的用例。

【讨论】:

    猜你喜欢
    • 2017-09-23
    • 1970-01-01
    • 2016-12-23
    • 2018-01-02
    • 2016-08-09
    • 2013-12-14
    • 2018-03-22
    • 1970-01-01
    • 2021-01-08
    相关资源
    最近更新 更多