我有eval函数,需要从php执行javascript。但我需要传递元素,所以我可以将鼠标放在用户点击的链接上的提示上。
var globalEval = function globalEval(src, element) {
if (window.execScript) {
window.execScript(src);
return;
}
var fn = function(element) {
window.eval.call(window,src);
};
fn(element);
};
我使用以下方式传递 $(this)
元素
globalEval(js_code, $(this));
// js_code is = alert(element);
我收到未定义元素的错误,它在 globalEval();
中定义,我该如何解决这个问题?
最佳答案
这是一个范围问题,因为全局 eval 没有在与变量 element
相同的范围内调用代码。如果你必须使用 eval
即使 eval is evil ,您必须以允许您在所需环境中调用代码的方式来执行此操作。一种方法是将其包装为匿名函数,您为所选的环境变量提供参数。
例如
window.eval.call(window,'(function (element) {'+src+'})')(element);
这意味着 src
字符串被解析但不被 eval
调用,因为它返回一个匿名函数。然后您调用它,传递您的数据,在本例中为 element
。
用 var element = document.body, src = 'console.log(element.tagName)';
测试它,你会看到它记录 "BODY"
.请注意,如果您想以这种方式设置全局变量(或函数),则必须明确地将它们声明为全局变量(window.foobar = ...
),否则它们将在匿名函数完成后被 GCd .
关于javascript传递eval变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13906161/