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
。