Связь между сценариями в фоновом контексте (фоновый сценарий, действие браузера, действие страницы, страница параметров и т. Д.)
Я столкнулся с проблемой отправки данных из моего фонового скрипта в скрипт для моегоpageAction
, Мой контент-скрипт добавляет<iframe />
и JavaScript в<iframe />
получает данные из моего фонового скрипта, но, похоже, не восстанавливается в моемpageAction
.
В моем фоновом скрипте у меня есть что-то вроде:
chrome.tabs.sendMessage(senderTab.tab.id,
{
foo:bar
});
гдеsenderTab.tab.id
является "отправителем" вonMessage
Слушатель в моем фоне сценария.
В JavaScript загружен<iframe />
введенный моим скриптом контента у меня что-то вроде:
chrome.runtime.onMessage.addListener(
function(request, sender, sendResponse) {
console.log("received in iframe:", request);
}
});
<iframe />
получает сообщение точно так, как ожидалось.
Я поставил тот же JavaScript в моемpage_action.js
, но он не получает никаких данных из фонового скрипта. Действие страницы активируется с помощьюchrome.pageAction.show(senderTab.tab.id);
прежде чем я позвонюchrome.tabs.sendMessage(senderTab.tab.id ...
Разве HTML-страница, прикрепленная к моей странице, не является частью той же вкладки? Так как этоtabId
позволил мне активировать / «показать» значок, я думаю, что слушатель в JavaScript для страницы действий также должен получать отchrome.tabs.sendMessage(senderTab.tab.id ...
В моем скрипте содержимого я использую следующее для отправки данных в фоновый скрипт:
chrome.runtime.sendMessage({
foo: bar
});
Когда скрипт содержимого отправляет вышеуказанное сообщение, JavaScript pageAction забирает его.
Как получить фоновый скрипт для правильной отправки данных на мою страницу действий? Я не хочу иметь запрос / опрос pageAction, вместо этого я хочу, чтобы pageAction просто слушал и получал. Например, если HTML-код pageAction показан, он должен иметь возможность обновляться в реальном времени, поскольку фоновая страница вносит изменения.