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
の場合にのみ作業する必要がありますか?
パターンマッチにはい(メッセージエディタがアスタリスクを食べている必要があります。) – user1028775