Chrome 拡張機能 - 単一ページの読み込みごとにコンテンツ スクリプトが複数回挿入される

StackOverflow https://stackoverflow.com/questions/7829895

質問

Chrome 拡張機能でコンテンツ スクリプトが同じページに複数回挿入されるという問題が発生しています。

タブ変更時に「background.html」ページからコンテンツ スクリプトを挿入しています。

chrome.tabs.onUpdated.addListener(function(tabId,changeInfo,tab){ 
    chrome.tabs.getSelected(null,function(tab){
         // Do some stuff
         chrome.tabs.executeScript(null, { code: code}, function(result){

...等

コンテンツ スクリプト内には、いくつかの console.log コマンドがあります。

問題は、単一のページをロードすると、各ログがコンソールに 2 ~ 4 回表示されることです。

ページ内の iframe が原因でこれが起こっていることは明らかです。少なくとも...私の質問は、なぜですか?

ドキュメントでは、「all_frames」(マニフェスト内のコンテンツスクリプトの権限配列)がデフォルトで「false」に設定され、その結果、コンテンツスクリプトがページの上部フレームにのみ挿入される必要があると見ましたが、これは単に起こっていません!

なぜ複数回注入されるのですか?「all_frames」を物理的に false に設定する必要がありますか?

第二に:

拡張機能がコンテンツスクリプトを挿入しようとしているページが「background.html」ページ内のiframeまたはtopであるかどうかを判断する方法はありますか?

私が試してみました

if(window.top === window){ console.log('whatever'); }

そして、それは100%機能しないことがわかりました。コード ブロックの残りの部分 ( chrome.tabs.executeScript() の周囲) にその条件を設定しても、コンテンツ スクリプトが複数回挿入されています。

アイデアや提案をいただければ幸いです。:)

役に立ちましたか?

解決

onUpdated タブの状態が変化するたびに起動されます。これには、次のような場合も含まれます。 読み込み中 そして ロード終わり, では、多くのログ ステートメントについて説明します。イベントが発生するたびに、何が変更されたか (URL が変更された、ロードされたなど) を確認する必要があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top