tabs.connect()

调用此函数来建立扩展的后台脚本(或其他特权脚本,如弹出窗口脚本或选项页脚本)与属于该扩展并正在指定标签中运行的任何内容脚本之间的连接。此函数返回一个 runtime.Port 对象。

调用此函数后,将在任何属于此扩展并在指定标签中运行的内容脚本中触发 runtime.onConnect 事件。事件监听器将会收到另一个 runtime.Port 对象。两侧可以使用 Port 对象来交换消息。

有关详细信息,请参阅基于连接的消息传递。你可以在不创建连接的情况下发送消息。关于如何选择这两种选项,请参阅选择一次性消息和基于连接的消息传递之间的区别

js
browser.tabs.connect(
  tabId,      // 整数
  connectInfo // 可选的对象
)

参数

tabId

integer。要连接到其内容脚本的标签页的 ID。

connectInfo 可选

包含以下属性的对象:

name 可选

string。将传递给属于此扩展并在指定标签页中运行的内容脚本的 runtime.onConnect 事件监听器。

frameId 可选

integer。打开由 frameId 指定的特定框架的端口,而不是标签页中的所有框架。

返回值

runtime.Port。一个可以用于与运行在指定标签页中的内容脚本进行通信的端口。

示例

在此示例中,后台脚本监听浏览器操作的点击事件,然后连接到当前活动的标签页,并通过从 connect() 返回的 Port 发送消息:

js
function connectToTab(tabs) {
  if (tabs.length > 0) {
    let examplePort = browser.tabs.connect(tabs[0].id, {
      name: "tabs-connect-example",
    });
    examplePort.postMessage({ greeting: "来自后台脚本的问候" });
  }
}

function onError(error) {
  console.log(`发生错误:${error}`);
}

browser.browserAction.onClicked.addListener(() => {
  let gettingActive = browser.tabs.query({
    currentWindow: true,
    active: true,
  });
  gettingActive.then(connectToTab, onError);
});

浏览器兼容性

BCD tables only load in the browser

备注: 此 API 基于 Chromium 的 chrome.tabs API。本文档内容源自 Chromium 代码中的 tabs.json