tabs.sendMessage()
Отправляет одно сообщение из фоновых скриптов расширения (или других скриптов с привилегиями, таких как скрипты всплывающего окна или страницы настроек) любому скрипту содержимого или страницам/iframe расширения, которые принадлежат расширению и выполняются в указанной вкладке.
Сообщение будет получено в контексте расширения любыми обработчиками события runtime.onMessage. Обработчики могут необязательно вернуть что-либо в качестве ответа отправителю.
Это асинхронная функция, которая возвращает Promise.
Примечание: Вы также можете использовать подход на основе соединений для обмена сообщениями.
Синтаксис
const sending = browser.tabs.sendMessage( tabId, // integer message, // any options // optional object )
Параметры
tabId-
integer. Идентификатор вкладки, скриптам содержимого которой мы хотим отправить сообщение. message-
any. Объект, который можно сериализовать (см. алгоритм клонирования данных). -
optionsНеобязательно -
object.-
frameIdНеобязательно -
integer. Отправляет сообщение в определённую рамку, идентифицированную поframeId, вместо всех рамок во вкладке. Выполняется ли скрипт содержимого во всех рамках, зависит от параметраall_framesв разделеcontent_scriptsmanifest.json.
-
Значение возврата
A Promise, который будет выполнен с объектом ответа, отправленным обработчиком сообщения в скрипте содержимого, или без аргументов, если скрипт содержимого не отправил ответ.
Если при подключении к указанной вкладке или по любой другой причине произойдёт ошибка, обещание будет отклонено с сообщением об ошибке.
Если несколько рамок отвечают на сообщение, обещание выполняется с одним из ответов.
Примеры
Вот пример скрипта фоновой части, который отправляет сообщение скриптам содержимого, выполняющимся в активной вкладке, при нажатии пользователем действия браузера. Скрипт фоновой части также ожидает, что скрипт содержимого отправит ответ:
// background-script.js "use strict"; function onError(error) { console.error(`Error: ${error}`); } function sendMessageToTabs(tabs) { for (const tab of tabs) { browser.tabs .sendMessage(tab.id, { greeting: "Hi from background script" }) .then((response) => { console.log("Message from the content script:"); console.log(response.response); }) .catch(onError); } } browser.browserAction.onClicked.addListener(() => { browser.tabs .query({ currentWindow: true, active: true, }) .then(sendMessageToTabs) .catch(onError); });
Вот соответствующий скрипт содержимого:
// content-script.js "use strict"; browser.runtime.onMessage.addListener((request) => { console.log("Message from the background script:"); console.log(request.greeting); return Promise.resolve({ response: "Hi from content script" }); });
Примеры расширений
Совместимость с браузерами
| Рабочий стол | Мобильные устройства | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Internet Explorer | Opera | Safari | WebView Android | Chrome Android | Firefox for Android | Opera Android | Safari on IOS | Samsung Internet | |
sendMessage |
Да | 14Ответ не отправляется после обновления вкладки получателя, если нет обработчикаruntime.onMessage. |
45 | ? | Да | 14 | ? | ? | 54 | ? | 15 | ? |
Примечание: Этот API основан на API chrome.tabs Chromium. Данная документация взята из tabs.json кода Chromium.
© 2005–2023 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs/sendMessage