2017-06-21 10 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 

:Webページで

  • 実行FirefoxとChromeの場合
  • Firefox Addon-SDKコンテンツスクリプトで実行する場合
  • クローム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は、FFにChromeの拡張機能を移植する非常に奇妙な驚きでした。これは意図された破損(またはバグ)ですか?これはどこに文書化されていますか? MDN compatibility notesには表示されません。

コンテキスト:私はコンテンツのスクリプトに(this.$に自身をインストール)zepto.jsを使用して、コードの一片がFFに失敗window.$、でそれにアクセスしました。

答えて

1

これは意図的であり、それは、私はそれが関係だ100%ではないですか、それがある場合には、意図的な(それがある場合は、適切に文書化)https://developer.mozilla.org/en-US/Add-ons/WebExtensions/Content_scripts#Accessing_page_script_objects_from_content_scripts

+0

で文書化されています。このページは、コンテンツスクリプトコンテキストでのページスクリプトオブジェクトの可視性についてのものですが、私はページスクリプトで何もしません。コンテンツスクリプトの 'x === this.x!== window.x'に関するものです。それはまた、 'wrappedJSObject'が無関係である理由です。 (私は質問に余分な文脈を追加しました) – Adrian17