javascript - 如何检测我在 eval() 调用中?

标签 javascript eval

是否存在字符串s这样

(new Function(s))();


eval(s);

表现不同?我正在尝试“检测”如何评估字符串。

最佳答案

检查 arguments目的。如果它存在,那么您就在函数中。如果不是,则为 eval编。

请注意,您必须检查 argumentstry...catch像这样 block :

var s = 'try {document.writeln(arguments ? "Function" : "Eval") } catch(e) { document.writeln("Eval!") }';
(new Function(s))();
eval(s);

Demo

Solution to nnnnnn 's concern.为此,我编辑了 eval 函数本身:
var _eval = eval;
eval = function (){
    // Your custom code here, for when it's eval
    _eval.apply(this, arguments);
};

function test(x){
    eval("try{ alert(arguments[0]) } catch(e){ alert('Eval detected!'); }");
}
test("In eval, but it wasn't detected");​

关于javascript - 如何检测我在 eval() 调用中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12227546/

相关文章:

javascript - 循环对象数组并根据键值对的匹配集进行过滤/排序/分组。

javascript - 递归函数有特殊的作用域规则吗?

javascript:检查表达式是否可评估?

javascript - 可以使用 $parse 或 $eval 来计算 Stingified bool 方程吗?

javascript - 函数内的 if 语句会破坏 javascript

javascript - Android 的 JNI JavaScript 绑定(bind)是否有效地将 TypedArray/ArrayBuffer 作为数组传递给 Java?

javascript - 使用 eval() 定义变量显示未定义错误

JavaScript - jQuery - 我的 dataSource() 函数安全吗? - 如何测试

javascript - 如何在 Chart.js 折线图中的曲线不改变的情况下通过 x 轴和 y 轴移动点?

java - C 中的 eval 函数结果为负