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);
});
浏览器兼容性
Loading…
备注:
此 API 基于 Chromium 的 chrome.tabs API。该文档衍生自 Chromium 代码中的 tabs.json。