我有 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)
element
globalEval(js_code, $(this));
// js_code is = alert(element);
我收到未定义元素的错误,该元素在中定义globalEval();
我怎样才能解决这个问题?
这是一个范围问题,因为全局 eval 没有调用与变量相同范围内的代码element
。如果你必须使用eval
虽然评估是邪恶的,您必须以一种允许您在所需环境中调用代码的方式来执行此操作。一种方法是将其包装为匿名函数,您可以为所选的环境变量提供参数。
例如
window.eval.call(window,'(function (element) {'+src+'})')(element);
这意味着src
字符串被解析但未被调用eval
因为它返回一个匿名函数。然后您调用它,传递您的数据,在本例中element
.
测试一下var element = document.body, src = 'console.log(element.tagName)';
你会看到它记录"BODY"
。请注意,如果您想以这种方式设置全局变量(或函数),则必须将它们显式声明为全局(window.foobar = ...
) 或者在匿名函数完成后它们将被GCd。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)