3

Chrome拡張機能で同じページに複数回コンテンツスクリプトを挿入する際に問題が発生します。Chrome拡張 - 1ページの読み込みごとに複数回コンテンツスクリプトが挿入される

私はタブの変化に、私の「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のコマンドを持っています

問題は、SINGLEページを読み込んだときに、各ログがコンソールに2〜4回表示されていることです。

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

ドキュメントでは、「all_frames」(マニフェストのコンテンツスクリプトのアクセス許可配列)をデフォルトで「false」に設定する必要があります。その結果、コンテンツスクリプトはページの上部フレームにのみ注入されますが、単純に起こっていない!

なぜ何度も注射されていますか?物理的に「all_frames」をfalseに設定する必要がありますか?第二に

は、拡張子が「background.html」ページ内からのiframeまたはトップであるために、コンテンツのスクリプトを挿入しようとしている場合はページを指示する方法はありますか?

私は

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

を試してみましたが、それは時間の100%に動作しないことを見出しました。私のコードブロック(chrome.tabs.executeScript()の周り)の残りの部分を条件付きにしても、私はまだ複数回に渡ってコンテンツスクリプトが表示されています....

アイデアや提案は大歓迎です! :)

+0

'tab'オブジェクトにはタブが現在選択されているかどうかを知る' active'というプロパティがあるので、 'chrome.tabs.getSelected()'を使う必要はありません。 – 10basetom

答えて

3

onUpdatedは、タブの状態が変わるたびに発生します。これには、ローディングローディングが完了したときに含まれます。多くのログステートメントを説明するがロードされます。 イベントが発生するたびに、変更された内容(変更されたURL、ロードされたURLなど)を確認する必要があります。

+0

うわー、私は気まずいですか? :)私は実際に 'if(changeInfo.status ==" complete "){}'を条件付きで使用していますが、影響を受けたブロックはその外にあります...これは複数のプラットフォームで複数のプロジェクトを処理するためのものです/ APIを同時に! :Pありがとう! – delta9

関連する問題