Во-первых, обратите внимание, что сообщения, передаваемые в расширении, сериализуются в формате 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
для получения идентификатора вкладки. Для простоты примера я жестко закодировал шаблоны и 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
использовался для передачи исходных данных на другую вкладку.
Примечание. В этом примере я передал сообщение только тогда, когда запрос привел к одной уникальной вкладке. Если уникальность не является обязательным условием, просто переберите все полученные вкладки, используя result.forEach
< /а> или:
for (var i=0, tab; i<result.length; i++) {
tab = results[i];
...
}
person
Rob W
schedule
22.07.2012