捕获"这个" webpack

时间:2017-09-03 21:26:28

标签: javascript webpack firefox-addon firefox-webextensions

我目前遇到以下错误:https://bugzilla.mozilla.org/show_bug.cgi?id=1208775

长话短说,我需要访问this.browser而不是window.browser。如果我用console.log(this.browser)替换我的webpack生成的文件,我得到正确的窗口变量,而如果我访问window.browser我得到未定义。建议的修复方法是访问this.browser,但我不确定如何将其作为webpack模块:

我有一个简单的browser.js文件,用于导出浏览器信息:

export default window.chrome || window.browser || this.browser;

由于我们处于功能上下文中,window.browserthis.browser都未定义,以及window.chrome(因为我在firefox中开发此功能)。我将如何通过webpack访问this.browser(这是在全球范围内)?

1 个答案:

答案 0 :(得分:2)

脚本执行上下文(而不是模块上下文)的顶级范围中的

this只是global object。网页中的全局对象是window对象,但在其他环境中(例如node.js,web worker或webextensions),它可以是其他对象。在webextensions的情况下,它是一个对象,security proxy委托不安全的窗口对象作为其原型。

所以,由于顶级this是全局对象,问题归结为获取全局对象,其中有indirect eval approach. 小警告:要在webextensions中使用eval,您必须在清单中relax the extension CSP

总结webextensions中的当前对象关系:

顶级this是全局对象。

this.prototype是不受信任窗口的安全代理,它提供标准窗口属性的原始视图。由于变量查找的工作方式和window.window的自引用性质,它通过原型查找也是this.window,并且当没有局部变量存在时通过委托给全局对象而不合格window

unsafeWindow == window.wrappedJSObject是安全代理的目标,它是不受信任的网页本身的窗口对象和全局