2012-03-27 13 views
0

Chrome拡張機能は、すべてのページにコンテンツスクリプトを挿入します("matches": ["http://*/*", "https://*/*"])。コンテンツスクリプトは、背景ページにメッセージ(chrome.extension.sendRequest)を起動しますと、背景ページは、イベントハンドラ登録:投稿用に起動されたコンテンツスクリプト

chrome.extension.onRequest.addListener(
    function (request, sender, callback) {…} 
); 

を私はアドレスバーに入力し始めると、それらのイベントが発生していることに気づいた - でも、私の前に宛先ページをロードするにはEnterキーを押します。

シナリオ:

  • 起動クローム
  • アドレスバーに入力を開始します。実際に、オムニボックスにフォーカスがあるとすぐに、私のchrome.extension.onRequest.addListener()イベントハンドラ[background.html]が起動されます。

奇妙なことは、sender.tab.indexの値が-1であるため、「実際の」タブにマップされないということです。また、私が覚え書きから離れて、そして全部に戻ると、イベントは発砲し続ける。毎回、sender.tab.indexは-1ですが、sender.tab.idは2ずつ増えています(43,45,47、...)。この動作は簡単に再現可能です。

次に、オムニボックスでEnterキーを押して実際にURL(例:example.com)を選択し、ブラウザ/タブにページが読み込まれると、さらに別のイベントが発生します。しかし、今度はsender.tab.indexは負ではない - 実際のブラウザタブを表し、私のコンテンツスクリプトハンドラはその作業を行うことができる。

これは動作していますか?コンテンツスクリプトは、オムニバスのアクションのための「ファントム」ページに挿入されています - これはどこに文書化されていますか?私のイベントハンドラがこれを処理する適切な方法は何ですか?コンテンツスクリプトハンドラがウェブページを操作する必要があるとしましょう。 sender.tab.indexをチェックして、sender.tab.index != -1の場合にのみ作業する必要がありますか?

答えて

0

Google拡張機能のAPIは完全に文書化されておらず、多くの文書化されていない動作があります。オムニバスから発砲したこれらの出来事は新しいものではなく、文書化されていません。

コンテンツスクリプトを自動的に挿入するのではなく、chrome.tabs.onUpdatedイベントへの応答としてプログラムで行うことをおすすめします。

http://code.google.com/chrome/extensions/tabs.html#event-onUpdated

これは、各URLのタブの変更に発生します。あなたはbackground.htmlでそれを聞いてから、chrome.tabs.executeScriptを使ってコンテンツスクリプトを実行する必要があります。あなたは、コンテンツのスクリプトを実行する前に、タブのIDとURLを確認することができるようになります。このように

http://code.google.com/chrome/extensions/tabs.html#method-executeScript

。 // */*

+0

パターンマッチにはい(メッセージエディタがアスタリスクを食べている必要があります。) – user1028775

1

ないことが起こっているできるだけ多く:

ところで、私はあなたのマッチパターンがHTTPであると仮定します。この動作はプリレンダリングされたページで期待されますが、その頻度ははるかに低いはずです。そのような場合は、コンテンツスクリプトにPage Visibility APIを使用し、ページが表示されない限り、バックグラウンドページにメッセージを送信しないでください。

また、コンテントスクリプトが注入されている極端な数の「タブ」については、bug reportを提出する必要があります。

1

「Chromeインスタント検索」と呼ばれる動作は、Chromeが目に見えない検索結果タブを準備してから、目に見えるタブでスワップして検索結果をより速く知ることができます。クロムは、他のウェブページを「プレレンダリング」して、知覚されたページの読み込みを高速化することもあります。

はい、タブIDが-1の場合は、タブが現在ファンタムタブ(ユーザーがアクセスできない)であることを示します。

ファントム(事前レンダリング)タブのドキュメントはまだどこにもありませんが、Chromeが通常のタブをプリレンダリングされたタブに置き換えたときに2つのイベントが発生し、プリレンダリングそして、Chromeインスタント:

関連する問題