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
。