Spec-Zone.ru › Web Extensions

runtime.connect()

Устанавливает соединение между различными контекстами внутри расширения.

Вы можете вызвать его:

  • в скриптах контента расширения, чтобы установить соединение со скриптами фонового процесса расширения (или аналогичными скриптами с привилегиями, такими как скрипты всплывающего окна или страницы настроек).
  • в скриптах фонового процесса расширения (или аналогичных скриптах с привилегиями), чтобы установить соединение с другим расширением.

Обратите внимание, что вы не можете использовать эту функцию для подключения расширения к его скриптам контента. Для этого используйте tabs.connect().

По умолчанию это соединение позволяет расширению обмениваться сообщениями с самим собой или любым другим расширением (если extensionId указано). Однако ключ externally_connectable манифеста может использоваться для ограничения связи определенными расширениями и включения связи с веб-сайтами. Соединения внутри расширения вызывают событие runtime.onConnect, соединения от других расширений или веб-страниц вызывают событие runtime.onConnectExternal.

Синтаксис

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

Параметры

extensionId Необязательный

string. Идентификатор расширения, к которому нужно подключиться. Если целевой объект явно установил ID с помощью ключа browser_specific_settings в manifest.json, то extensionId должен иметь это значение. В противном случае он должен иметь ID, сгенерированный для целевого объекта.

connectInfo Необязательный

object. Детали подключения:

name Необязательный

string. Будет передан в runtime.onConnect для процессов, ожидающих события подключения.

includeTlsChannelId Необязательный

boolean. Будет ли идентификатор канала TLS передан в runtime.onConnectExternal для процессов, ожидающих события подключения.

Возвращаемое значение

runtime.Port. Порт, через который можно отправлять и получать сообщения. Событие onDisconnect порта срабатывает, если расширение не существует.

Совместимость с браузерами

Рабочие столы Мобильные
Chrome Edge Firefox Internet Explorer Opera Safari WebView Android Chrome Android Firefox for Android Opera Android Safari на IOS Samsung Internet
connect 26 14 45 ? 15 14 ? ? 48 ? 15 ?

Примеры

Этот скрипт контента:

  • подключается к скрипту фонового процесса и сохраняет Port в переменной под названием myPort.
  • прослушивает сообщения на myPort и регистрирует их.
  • отправляет сообщения скрипту фонового процесса, используя myPort, когда пользователь щелкает по документу.
// 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!"});
});

Соответствующий скрипт фонового процесса:

  • прослушивает попытки подключения от скрипта контента.
  • при получении попытки подключения:
    • сохраняет порт в переменную под названием portFromCS.
    • отправляет скрипту контента сообщение, используя порт.
    • начинает прослушивать сообщения, полученные по порту, и регистрирует их.
  • отправляет сообщения скрипту контента, используя portFromCS, когда пользователь щелкает по действию расширения в браузере.
// 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!"});
});

Примечание: Этот 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/connect

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API