tabs.connect()

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

当调用此函数时,runtime.onConnect事件将在属于此扩展并在指定标签页中运行的任何内容脚本中触发。事件监听器将传递另一个runtime.Port对象。然后,双方可以使用Port对象交换消息。

有关更多详细信息,请参阅基于连接的消息传递。您可以无需创建连接即可发送消息,有关选择选项的建议,请参阅在一次性消息和基于连接的消息传递之间进行选择

语法

js
browser.tabs.connect(
  tabId,      // integer
  connectInfo // optional object
)

参数

tabId

整数。要连接其内容脚本的标签页的 ID。

connectInfo 可选

具有以下属性的对象

name 可选

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

frameId 可选

整数。打开到由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: "Hi from background script" });
  }
}

function onError(error) {
  console.log(`Error: ${error}`);
}

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

浏览器兼容性

BCD 表仅在启用了 JavaScript 的浏览器中加载。

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