我目前遇到以下错误: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.browser
和this.browser
都未定义,以及window.chrome
(因为我在firefox中开发此功能)。我将如何通过webpack访问this.browser
(这是在全球范围内)?
答案 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
是安全代理的目标,它是不受信任的网页本身的窗口对象和全局