私はブラウザの拡張機能/アドオンに取り組んでいます。Chromeで動作しているので、Firefoxで動作させようとしています。
アドオンを Firefox Developer Edition 49.0a2 (2016-07-25) にロードするようになりました。
私の拡張機能には content_script が に設定されてrun_at: document_start
いるため、他のページ スクリプトが実行される前にスクリプト タグを挿入できるため、オブジェクトを Web サイトでグローバルに利用できるようになります。
これは Chrome では正常に機能しているように見えますが、Firefox では、ほとんどの場合、他のページ リソースが最初に読み込まれるため、多少の競合状態であることが証明されています。
他のページ スクリプトが実行される前にスクリプトを挿入してロードできるように、コンテンツ スクリプトをロードする戦略はありますか?
ログを追加すると、何が起こっているのかをうまく切り分けることができます。このコンテンツ スクリプトの例では、次のようになります。
// inject in-page script
console.log('STEP 1, this always happens first')
var scriptTag = document.createElement('script')
scriptTag.src = chrome.extension.getURL('scripts/inpage.js')
scriptTag.onload = function () { this.parentNode.removeChild(this) }
var container = document.head || document.documentElement
// append as first child
container.insertBefore(scriptTag, container.children[0])
ファイルscripts/inpage.js
が単にログを実行する場合、
console.log('STEP 2, this should always run second')
そして、次のようなスクリプトを含むページにアクセスします。
console.log('Step 3, the page itself, should run last')
実際には、ステップ 2 とステップ 3 は非決定的な順序で実行されます。
どうもありがとう!
自分で試す勇気がある場合は、特別なブランチの公開リポジトリに Firefox 互換バージョンのスクリプトがあります: https://github.com/MetaMask/metamask-plugin/tree/FirefoxCompatibility