まず、拡張機能内で渡されるメッセージは JSON でシリアル化されることに注意してください。関数などのシリアル化できない型はメッセージに含まれません。
コンテンツ スクリプト内では、メッセージをバックグラウンド ページに渡す必要があります。これは、他のタブに直接アクセスする方法がないためです。
// Example: Send a string. Often, you send an object, which includes
// additional information, eg {method:'userdefined', data:'thevalue'}
chrome.extension.sendMessage(' ... message ... ');
バックグラウンド ページで、 メソッドを使用しchrome.tabs.query
てタブの ID を取得します。例を簡単にするために、パターンと URL をハードコーディングしました。次のように、前のメッセージのクエリ値を含めることをお勧めします{query:{...}, data:...}
。
// background script:
chrome.extension.onMessage.addListener(function(details) {
chrome.tabs.query({
title: "title pattern",
url: "http://domain/*urlpattern*"
}, function(result) {
// result is an array of tab.Tabs
if (result.length === 1) { // There's exactely one tab matching the query.
var tab = result[0];
// details.message holds the original message
chrome.tabs.sendMessage(tab.id, details.message);
}
});
});
chrome.tabs.sendMessage
元のデータを別のタブに渡すために使用されました。
注: この例では、クエリの結果が 1 つの一意のタブになったときにのみメッセージを渡しました。result.forEach
一意性が前提条件でない場合は、またはを使用して、結果のすべてのタブをループします。
for (var i=0, tab; i<result.length; i++) {
tab = results[i];
...
}