runtime.connect()
在扩展内部的不同上下文之间建立连接。
你可以调用这个
- 在扩展的内容脚本中,以与扩展的后台脚本(或类似权限的脚本,如弹出窗口脚本或选项页面脚本)建立连接。
- 在扩展的后台脚本(或类似权限的脚本)中,以与其他扩展建立连接。
请注意,你无法使用此函数将扩展连接到其内容脚本。要执行此操作,请使用 tabs.connect()
。
默认情况下,此连接使扩展能够与自身或任何其他扩展(如果指定了 extensionId
)交换消息。但是,externally_connectable
清单键可用于将通信限制为特定扩展并启用与网站的通信。扩展内的连接会触发 runtime.onConnect
事件,来自其他扩展或网页的连接会触发 runtime.onConnectExternal
事件。
语法
js
let port = browser.runtime.connect(
extensionId, // optional string
connectInfo // optional object
)
参数
extensionId
可选-
string
。要连接到的扩展的 ID。如果目标已使用 manifest.json 中的 browser_specific_settings 键显式设置了 ID,则extensionId
应具有该值。否则,它应具有为目标生成的 ID。 connectInfo
可选-
object
。连接的详细信息name
可选-
string
。将传递到runtime.onConnect
中,用于侦听连接事件的进程。 includeTlsChannelId
可选-
boolean
。是否将 TLS 通道 ID 传递到runtime.onConnectExternal
中,用于侦听连接事件的进程。
返回值
runtime.Port
。可以通过该端口发送和接收消息。如果扩展不存在,则会触发端口的 onDisconnect
事件。
浏览器兼容性
BCD 表仅在浏览器中加载
示例
此内容脚本
- 连接到后台脚本并将
Port
存储在名为myPort
的变量中。 - 侦听
myPort
上的消息并记录它们。 - 当用户单击文档时,使用
myPort
向后台脚本发送消息。
js
// content-script.js
let myPort = browser.runtime.connect({ name: "port-from-cs" });
myPort.postMessage({ greeting: "hello from content script" });
myPort.onMessage.addListener((m) => {
console.log("In content script, received message from background script: ");
console.log(m.greeting);
});
document.body.addEventListener("click", () => {
myPort.postMessage({ greeting: "they clicked the page!" });
});
相应的后台脚本
- 侦听来自内容脚本的连接尝试。
- 当它收到连接尝试时
- 将端口存储在名为
portFromCS
的变量中。 - 使用端口向内容脚本发送消息。
- 开始侦听在端口上接收到的消息,并记录它们。
- 将端口存储在名为
- 当用户单击扩展的浏览器操作时,使用
portFromCS
向内容脚本发送消息。
js
// background-script.js
let portFromCS;
function connected(p) {
portFromCS = p;
portFromCS.postMessage({ greeting: "hi there content script!" });
portFromCS.onMessage.addListener((m) => {
console.log("In background script, received message from content script");
console.log(m.greeting);
});
}
browser.runtime.onConnect.addListener(connected);
browser.browserAction.onClicked.addListener(() => {
portFromCS.postMessage({ greeting: "they clicked the button!" });
});
注意:此 API 基于 Chromium 的 chrome.runtime
API。本文档源自 Chromium 代码中的 runtime.json
。