如何动态更改js代码?

时间:2012-10-23 08:49:21

标签: javascript ajax dynamic-function

如何在运行时替换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 ()

1 个答案:

答案 0 :(得分:0)

这与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。但您也可以将它用于您的用例。