私はブラウザの拡張機能/アドオンに取り組んでいます。私たちはChromeで作業しているので、Firefoxで動作させようとしています。firefoxアドオンを作成するにはcontentscriptは他のページスクリプトの前にスクリプトを挿入して実行しますか?
私のアドオンはFirefox Developer Edition 49.0a2(2016-07-25)にロードされています。
拡張子はrun_at: document_start
に設定されているため、他のページスクリプトを実行する前にスクリプトタグを挿入できるため、ウェブサイトでオブジェクトをグローバルに使用できるようになります。
これは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の互換バージョンがあります:外部ソース(<script src>
)とhttps://github.com/MetaMask/metamask-plugin/tree/FirefoxCompatibility
これは、現在のページにスクリプトタグを追加する行です。私はログでこれを行うとき、私はこのコードがページスクリプトの前に実行されるのを見ますが、注入されたスクリプト自体は常にページスクリプトの前に実行されるとは限りません。 https://github.com/MetaMask/metamask-plugin/blob/FirefoxCompatibility/app/scripts/contentscript.js#L20 – DanF