【问题标题】:How to turn off strict mode when using Phantomjs使用 Phantomjs 时如何关闭严格模式
【发布时间】:2023-03-05 02:18:01
【问题描述】:


当我们在项目中将 Phantomjs 与 Base2 库结合使用时,会出现以下错误:

+ phantomjs ...../src/test/javascript/SpecRunner.html
TypeError: setting a property that has only a getter

谁能指出如何解决这个问题?它似乎是由于 Phantomjs 内部的 Javascript“严格模式”而发生的(请参阅 here),但无法从 Phantomjs 文档中找到如何关闭它,特别是因为它发生在我们需要的外部库(Base2.js)中?

谢谢,
稻谷

【问题讨论】:

    标签: phantomjs


    【解决方案1】:

    Base2.js 似乎没有定义“使用严格”。这意味着在您的一个 javascript 文件中,您在任何函数之外都有一个“使用严格”行。这会在定义时打开严格模式,您不能再次将其关闭。最好只在函数声明中打开它。

    要解决此问题,请在项目中包含的所有文件中搜索“use strict”或“use strict”。然后将它们移除或移动到函数体内。

    https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions_and_function_scope/Strict_mode

    Can I disable ECMAscript strict mode for specific functions?

    【讨论】:

    • 嗨@Emmentaler,你是对的,但我使用了很多外部库,如 angular*.js,其中包含任何函数之外的全局“使用严格”行。这意味着要使用您建议的想法解决问题,我不仅必须在所有这些外部 JS 库之前声明 base2.js,而且还要在 SpecRunner.html 中使用 Base2 的所有这些库之前声明扩展 Base2 的类,看起来尴尬,虽然如果没有其他出路你可以忍受它。有没有办法在我扩展 Base2 的文件的开头关闭“使用严格”?
    • 唉,没有。这是一个已知问题。问题是它以这种方式实现以保持与早期版本的 javascript 的向后兼容性。我讨厌它不像 C 或 C++ 中的#define 那样工作。在上面的编辑中,我添加了指向类似 SO 问题的链接
    • 感谢@Emmentaler,这意味着我们必须忍受预先声明所有“不严格”的 JS 文件的尴尬。由于它是 SpecRunner.html 而不是实际代码,我想至少现在这不是什么大问题。
    猜你喜欢
    • 2014-02-20
    • 2019-12-25
    • 2013-10-08
    • 2015-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-07
    • 2016-10-28
    相关资源
    最近更新 更多