沙盒`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上失败。

+0

是记录我不是100%它是相关的,或者如果它是故意的(或者如果它是,适当的记录)。该页面是关于页面脚本对象在内容脚本上下文中的可见性,但我对页面脚本没有做任何事情,它只是关于内容脚本中的'x === this.x!== window.x'。这也是为什么'wrappedJSObject'不相关。 (我在问题中增加了一些额外的上下文) – Adrian17