runtime.onMessageExternal
Use this event to listen for messages from other extensions or web pages.
By default, an extension can receive messages from any other extension. However, the externally_connectable manifest key can be used to limit communication to specific extensions and enable communication with websites.
To send a message that is received by the onMessageExternal listener, use runtime.sendMessage(), passing the ID of the recipient in the extensionId parameter.
Along with the message itself, the listener is passed:
- a
senderobject giving details about the message sender - a
sendResponsefunction that the listener can use to send a response back to the sender.
This API can't be used in a content script.
Syntax
browser.runtime.onMessageExternal.addListener() browser.runtime.onMessageExternal.removeListener(listener) browser.runtime.onMessageExternal.hasListener(listener)
Events have three functions:
addListener(callback)-
Adds a listener to this event.
removeListener(listener)-
Stop listening to this event. The
listenerargument is the listener to remove. hasListener(listener)-
Checks whether a
listeneris registered for this event. Returnstrueif it is listening,falseotherwise.
addListener syntax
Parameters
function-
A callback function that is called when this event occurs. The function is passed these arguments:
message-
object. The message itself. This is a JSON-ifiable object. sender-
A
runtime.MessageSenderobject representing the sender of the message. sendResponse-
A function to call, at most once, to send a response to the message. The function takes a single argument, which may be any JSON-ifiable object. This argument is passed back to the message sender.
If you have more than one
onMessageExternallistener in the same document, then only one may send a response.To send a response synchronously, call
sendResponsebefore the listener function returns. To send a response asynchronously, do one of these:- keep a reference to the
sendResponseargument and returntruefrom the listener function. You can then callsendResponseafter the listener function has returned. - return a
Promisefrom the listener function and resolve the promise when the response is ready.
- keep a reference to the
Browser compatibility
| Desktop | Mobile | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Internet Explorer | Opera | Safari | WebView Android | Chrome Android | Firefox for Android | Opera Android | Safari on IOS | Samsung Internet | |
onMessageExternal |
26 | 79 | 54 | ? | 15 |
15.4Since Safari 15.4, this event is also fired in response to a message from webpages allowed inexternally_connectable.14This event is only fired in response to a message from an extension's containing app, not webpages nor other extensions. |
? | ? | 54 | ? |
15.4Since Safari 15.4, this event is also fired in response to a message from webpages allowed inexternally_connectable.15This event is only fired in response to a message from an extension's containing app, not webpages nor other extensions. |
? |
return_promise |
No | No | Yes | ? | No | 15.4 | ? | ? | Yes | ? | 15.4 | ? |
Examples
In this example the extension "blue@mozilla.org" sends a message to the extension "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);
Note: This API is based on Chromium's chrome.runtime API. This documentation is derived from runtime.json in the Chromium code.
© 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