【问题标题】:How to replace eval() during monkey patching?如何在猴子修补期间替换 eval()?
【发布时间】:2018-02-11 20:22:57
【问题描述】:

我开发了一个浏览器扩展,将补丁应用到原始功能如下:

eval('sourceFunction=' + sourceFunction.toString().replace(/foo/g, 'bar'));

Mozilla 附加组件目录的审阅者禁止使用 eval 方法,因为这是不安全的。是否有其他方法可以类似地修补该功能?

【问题讨论】:

  • 你必须使用原始函数的内容作为字符串?
  • 如果'foo'是函数内的一个标识符,它在函数范围之外解析,那么是的。否则,我不这么认为。

标签: javascript firefox-addon eval mozilla browser-extension


【解决方案1】:

如果您必须将原始函数的内容用作字符串,那么不,可能不会。

虽然您可以改用new Function

sourceFunction = new Function("return " + sourceFunction.toString().replace(/*...*/))();

...任何禁止eval 的明智政策也可能会禁止new Function..

【讨论】:

    猜你喜欢
    • 2011-04-16
    • 2016-11-27
    • 2012-03-13
    • 2013-12-26
    • 2012-06-14
    • 2012-03-29
    • 2016-10-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多