沙盒`this`在Firefox WebExtension内容脚本
问题描述:
下面的代码:沙盒`this`在Firefox WebExtension内容脚本
(function(local_window) {
local_window.example = 1234;
console.log(window);
console.log(local_window);
}(this));
console.log(this);
console.log(window.example);
console.log(example);
打印(如预期)以下内容:
Window
Window
Window
1234
1234
当:
- 运行在网页中在Firefox和Chrome上运行
- 在Firefox Addon-SDK内容脚本中运行
- 运行在Chrome WebExtension内容脚本
然而,在Firefox中WebExtension内容脚本此打印如下:
Window
Sandbox { browser: Getter, chrome: Getter, example: 1234, browser: Object, chrome: Object, window: Window → /, document: HTMLDocument → /, location: Location → /, top: Window → /, self: Window → /, 72 more }
Sandbox { browser: Object, chrome: Object, example: 1234, window: Window → /, document: HTMLDocument → /, location: Location → /, top: Window → /, self: Window → /, name: "", history: History, 72 more }
undefined
1234
example !== window.example
是一个非常奇怪的惊喜,然后移植Chrome扩展到FF。这是一个意图破损(或一个错误)?这是记录在任何地方?我在MDN compatibility notes中看不到它。
上下文:我在内容脚本中使用zepto.js(将其自身安装到this.$
中),并且一段代码正在使用window.$
访问它,但在FF上失败。
是记录我不是100%它是相关的,或者如果它是故意的(或者如果它是,适当的记录)。该页面是关于页面脚本对象在内容脚本上下文中的可见性,但我对页面脚本没有做任何事情,它只是关于内容脚本中的'x === this.x!== window.x'。这也是为什么'wrappedJSObject'不相关。 (我在问题中增加了一些额外的上下文) – Adrian17