2017-06-21 81 views
1

下面的代碼:沙盒`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上失敗。

回答

1
+0

是記錄我不是100%它是相關的,或者如果它是故意的(或者如果它是,適當的記錄)。該頁面是關於頁面腳本對象在內容腳本上下文中的可見性,但我對頁面腳本沒有做任何事情,它只是關於內容腳本中的'x === this.x!== window.x'。這也是爲什麼'wrappedJSObject'不相關。 (我在問題中增加了一些額外的上下文) – Adrian17