javascript传递eval变量

标签 javascript jquery eval execution

我有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/

相关文章:

javascript - 我想将一组 jquery 选择器存储为要延迟评估的数据结构

javascript - 等到 promise 和 nested then 完成

javascript - 使用 JavaScript 将滚动条添加到 jQuery 自动完成

sql - R: Knitr 给出了 SQL-chunk 的错误

javascript - onchange 下拉列表的问题

javascript - 了解 JS 编译问题

javascript - 将 moment 设置为 0 时的 19 小时偏移量(使用 moment.js)

javascript - 如何防止页面在发布表单后重新加载?

python - 这个 eval() 是可破解的吗?

linux - 没有从第一个变量中删除空格