コンテンツ スクリプトとページ アクション ポップアップの間でデータを渡す方法がわかりません。
タイトルにマイナスダッシュが含まれるすべてのページのページ アクションを示す、次の単純なスケルトンから始めました。
拡張マニフェスト (
manifest.json
):{ … "permissions": ["http://example.org/*"], "background": {"scripts": ["background.js"]}, "page_action": {"default_popup": "popup.html", …}, "content_scripts": { "matches": ["http://example.org/*"], "js": ["content.js"] } }
バックグラウンド スクリプト (
background.js
):chrome.extension.onRequest.addListener(function (msg, sender, respond) { if (msg && msg.what === "match") { console.log("Match:", msg.title); chrome.pageAction.show(sender.tab.id); } }
コンテンツ スクリプト (
content.js
)、ドキュメントのタイトルをチェック:var title = document.title; if (title.indexOf("-") >= 0) { chrome.extension.sendRequest({"what": "match", "title": title}); }
今、ページ アクションのポップアップで、一致したページのタイトルを表示したいと思います。最後に読み込まれたページのタイトル (この回答を使用して行われるように) ではなく、アクティブなタブのタイトルです。
私の最初の方法は、コンテンツ スクリプトにクエリを送信することでしたが、ドキュメントによると、それはすべてのchrome.extension.sendMessage
リスナー (つまり、すべてのタブのすべてのコンテンツ スクリプト)に送信されます。誰の応答を受け取るかについての明確な定義はありません。また、必要に応じて使用できません。を使用して現在のタブを見つけようとすると、が返されます。これは、クエリがタブ以外のコンテキスト (ポップアップ) から来るためです。chrome.tabs.sendMessage
tabId
chrome.tabs.getCurrent
null
たぶんコミュニケーションには使えると思うけどchrome.tabs.executeScript
、これはただ汚く感じるだけだ。
それでも、これは非常に簡単に実行できる基本的なことであり、何かが欠けているだけだと思います。誰かが、できればサンプルコードで私を助けてくれませんか?
更新: Mappy の例の拡張機能を見つけましchrome.tabs.onUpdated
た。アクティブなタブを追跡するために使用します。残念ながら、これにはtabs
許可が必要です。個人的には、可能な限り最小限の権限を使用したいと考えています。
それで、残念ながら許可システムの設計が悪いので、このようにするしかないのでしょうか、それとも回避策はありますか? chrome.pageAction.onClicked
イベント ハンドラー (Tab
必要なオブジェクトを提供する) でポップアップを表示できるようになれば幸いです...