runtime.onMessageExternal
Используйте это событие для прослушивания сообщений от других расширений или веб-страниц.
По умолчанию расширение может получать сообщения от любого другого расширения. Однако ключ externally_connectable манифеста может использоваться для ограничения связи определёнными расширениями и включения связи с веб-сайтами.
Для отправки сообщения, которое получит слушатель onMessageExternal, используйте runtime.sendMessage(), передавая идентификатор получателя в параметре extensionId.
Вместе с самим сообщением слушатель получает:
- объект
sender, предоставляющий подробности об отправителе сообщения - функцию
sendResponse, которую слушатель может использовать для отправки ответа отправителю.
Этот API не может использоваться в скрипте содержимого.
Синтаксис
browser.runtime.onMessageExternal.addListener() browser.runtime.onMessageExternal.removeListener(listener) browser.runtime.onMessageExternal.hasListener(listener)
События имеют три функции:
addListener(callback)-
Добавляет слушателя к этому событию.
removeListener(listener)-
Прекращает прослушивание этого события. Аргумент
listener— это слушатель, который нужно удалить. hasListener(listener)-
Проверяет, зарегистрирован ли слушатель
listenerдля этого события. Возвращаетtrue, если он прослушивает,false, в противном случае.
Синтаксис addListener
Параметры
function-
Функция обратного вызова, которая вызывается при возникновении этого события. Функция получает следующие аргументы:
message-
object. Само сообщение. Это объект, преобразуемый в JSON. sender-
Объект
runtime.MessageSender, представляющий отправителя сообщения. sendResponse-
Функция для вызова (не более одного раза) для отправки ответа на сообщение. Функция принимает один аргумент, который может быть любым объектом, преобразуемым в JSON. Этот аргумент возвращается отправителю сообщения.
Если в одном документе есть более одного слушателя
onMessageExternal, то только один может отправить ответ.Чтобы отправить ответ синхронно, вызовите
sendResponseдо возвращения функции слушателя. Чтобы отправить ответ асинхронно, сделайте одно из следующих:- сохраните ссылку на аргумент
sendResponse, и вернитеtrueиз функции слушателя. Затем вы можете вызватьsendResponseпосле возвращения функции слушателя. - верните
Promiseиз функции слушателя и разрешите промис, когда ответ будет готов.
- сохраните ссылку на аргумент
Совместимость с браузерами
| Рабочие столы | Мобильные устройства | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Internet Explorer | Opera | Safari | WebView Android | Chrome Android | Firefox for Android | Opera Android | Safari на IOS | Samsung Internet | |
onMessageExternal |
26 | 79 | 54 | ? | 15 |
15.4Начиная с Safari 15.4, это событие также срабатывает в ответ на сообщение от веб-страниц, разрешённых вexternally_connectable.14Это событие срабатывает только в ответ на сообщение из содержащего приложения расширения, а не веб-страниц или других расширений. |
? | ? | 54 | ? |
15.4Начиная с Safari 15.4, это событие также срабатывает в ответ на сообщение от веб-страниц, разрешённых вexternally_connectable.15Это событие срабатывает только в ответ на сообщение из содержащего приложения расширения, а не веб-страниц или других расширений. |
? |
return_promise |
Нет | Нет | Да | ? | Нет | 15.4 | ? | ? | Да | ? | 15.4 | ? |
Примеры
В этом примере расширение "blue@mozilla.org" отправляет сообщение расширению "red@mozilla.org":
// sender: browser.runtime.id === "blue@mozilla.org" // Send a message to the extension whose ID is "red@mozilla.org" browser.runtime.sendMessage( "red@mozilla.org", "my message" );
// recipient: browser.runtime.id === "red@mozilla.org" function handleMessage(message, sender) { // check that the message is from "blue@mozilla.org" if (sender.id === "blue@mozilla.org") { // process message } } browser.runtime.onMessageExternal.addListener(handleMessage);
Примечание: Этот API основан на API chrome.runtime Chromium. Данная документация взята из runtime.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/runtime/onMessageExternal