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