Расширение chrome: chrome.tabs.sendmessage отправляет сообщение на все вкладки, даже если указан tabId
Есть ли ошибка в том, как я это реализую? Я открываю новую вкладку и затем отправляю сообщение на эту вкладку, но затем все остальные вкладки, на которых есть прослушиватель, также получают сообщение.
В background.js:
chrome.tabs.create({url:chrome.extension.getURL("placement.html")},function(tab){
chrome.tabs.sendMessage(tab.id, {
"name":"name",
"payload":payload
});
});
В Place.js (запускается, когда загружается Place.html):
chrome.runtime.onMessage.addListener(function(request, sender, sendResponse) {
if (request.name == "name") {
payload = request.payload;
}
});
Я вижу, что всякий раз, когда создается новая вкладка, полезная нагрузка отправляется на все вкладки, которые имеют этот прослушиватель onMessage. Этот код относительно старый, поэтому я не уверен, что, может быть, что-то недавно изменилось, что влияет на то, как chrome.tabs.sendMessage интерпретирует "tab.id". Любая помощь приветствуется!
1 ответ
Я согласен с @wOxxOm, это ошибка в новой версии Chrome... и кажется chrome.tabs.connect
не уважает параметр идентификатора вкладки.
Я решил это, отправив URL-адрес нужной вкладки в скрипт содержимого и убедившись, что URL-адреса совпадают.
Из всплывающего окна:
chrome.tabs.query({currentWindow: true,active: true}, function(tabs){
port = chrome.tabs.connect(tabs[0].id,{name: "channelName"});
port.postMessage({url:tabs[0].url});
});
Из содержимого скрипта:
chrome.runtime.onConnect.addListener(function(port) {
if(port.name == "channelName"){
port.onMessage.addListener(function(response) {
if(response.url == window.location.href){
}
});
}
});
Я открыл вопрос здесь после того, как связался с разработчиком из Google.