docs.rodeo

MDN Web Docs mirror

runtime.connect()

{{AddonSidebar}} 

Make a connection between different contexts inside the extension.

You can call this:

Note that you can’t use this function to connect an extension to its content scripts. To do this, use {{WebExtAPIRef('tabs.connect()')}} .

By default, this connection enables the extension to exchange messages with itself or any other extension (if extensionId is specified). However, the externally_connectable manifest key can be used to limit communication to specific extensions and enable communication with websites. Connections within the extension trigger the {{WebExtAPIRef('runtime.onConnect')}}  event, connections from other extensions or web pages trigger the {{WebExtAPIRef('runtime.onConnectExternal')}}  event.

Syntax

let port = browser.runtime.connect(
  extensionId, // optional string
  connectInfo  // optional object
)

Parameters

Return value

{{WebExtAPIRef('runtime.Port')}} . Port through which messages can be sent and received. The port’s onDisconnect event is fired if the extension does not exist.

Browser compatibility

{{Compat}} 

Examples

This content script:

// content-script.js

let myPort = browser.runtime.connect({ name: "port-from-cs" });
myPort.postMessage({ greeting: "hello from content script" });

myPort.onMessage.addListener((m) => {
  console.log("In content script, received message from background script: ");
  console.log(m.greeting);
});

document.body.addEventListener("click", () => {
  myPort.postMessage({ greeting: "they clicked the page!" });
});

The corresponding background script:

// background-script.js

let portFromCS;

function connected(p) {
  portFromCS = p;
  portFromCS.postMessage({ greeting: "hi there content script!" });
  portFromCS.onMessage.addListener((m) => {
    console.log("In background script, received message from content script");
    console.log(m.greeting);
  });
}

browser.runtime.onConnect.addListener(connected);

browser.browserAction.onClicked.addListener(() => {
  portFromCS.postMessage({ greeting: "they clicked the button!" });
});

{{WebExtExamples}} 

[!NOTE] This API is based on Chromium’s chrome.runtime API. This documentation is derived from runtime.json in the Chromium code.

In this article

View on MDN