2011-01-25 1 views
0

ポップアップウィンドウを表示して各ウェブページに関する最新のデータを収集する(バックグラウンドページにメッセージを送信する)前に、Chrome拡張機能ですべての開いているタブのコンテンツスクリプトを再実行します。私の問題は、各iframeへのフルアクセスを得るためには、allframesをtrueに設定する必要があるということです。つまり、ポップアップウィンドウを表示する前に、各フレームからメッセージを受け取るまで待つ必要があります。すべてのフレームがChrome拡張機能のcontentscriptからの返信を返したことを検出するにはどうすればよいですか?

私の問題は、フレームがいくつあるかを判断する方法がわかりません。私が調べた1つのアプローチは、contentscript内からフレーム数を検出することですが、今すぐ要求できないことを示す未解決のバグがあります。もう1つは、最初にページに移動したときに得たものと同等の数の応答を待つことですが、AJAX呼び出しによってフレーム数が増加した可能性があります。最後に、私はchrome.extension.SendRequestに対する応答にそのような情報が含まれることを期待していましたが、そうではありません。

あなたのお手伝いがありがとうございます。

答えて

0

新しいフレームが読み込まれるたびにコンテンツスクリプトが実行されるように、常にマニフェストからコンテンツスクリプトを実行することをお勧めします。次に、コンテンツスクリプトが拡張モジュールへのポートを開くようにして、すべてのオープンフレームがバックグラウンドへのポートを持つようにします。次に、各タブのすべての開いているポートを追跡し、目的のポートにメッセージを送信するのはバックグラウンドページまでです。

+0

ありがとうございます。私はポートを使用して、コンテンツスクリプトとバックグラウンドページとの間の通信を改善する方法について検討します。しかし、私はまだcontentscriptが新しいフレーム(常にhttp://www.reddit.com/r/videosで動作しますが、Facebookのビデオでは機能しないようです)のために実行されないという問題があります。 –

+0

実際には、問題はFacebookに埋め込まれた(Facebookのビデオ特有のものではない)ビデオのようだ。私がチャンスを得ると、ソースを見て、各サイトにiframeがどのように埋め込まれているかを比較します(作成されたときに新しいiframeでcontentscriptを実行することが予想される場合はバグを報告することがあります)。 –

+0

私はコンテンツスクリプト単にconsole.log( 'injected!')を実行し、開発者コンソールを使用してiframeを追加してナビゲートすると、コンテンツスクリプトが実行されます。私はあなたがそれを理解して欲しい。 – yonran

関連する問題