每当我使用 forge.message.broadcast 时,我都会立即看到一堆错误:
Port error: Could not establish connection. Receiving end does not exist.
它似乎与打开的选项卡数量 + 打开的开发者控制台的数量直接相关。但是,没有任何堆栈跟踪,似乎无法追踪。
每当我使用 forge.message.broadcast 时,我都会立即看到一堆错误:
Port error: Could not establish connection. Receiving end does not exist.
它似乎与打开的选项卡数量 + 打开的开发者控制台的数量直接相关。但是,没有任何堆栈跟踪,似乎无法追踪。
这是正常的,查看 的定义forge.message.broadcast
:
forge.message.broadcast = function (r, s, t, q) {
chrome.windows.getAll({
populate: true
}, function (u) {
u.forEach(function (v) {
v.tabs.forEach(function (x) {
if (x.url.indexOf("chrome-extension:") != 0) {
var w = chrome.tabs.connect(x.id);
if (t) {
w.onMessage.addListener(function (y) {
t(y)
})
}
w.postMessage({
type: r,
content: s
})
}
})
})
});
var p = chrome.extension.connect();
if (t) {
p.onMessage.addListener(function (u) {
t(u)
})
}
p.postMessage({
type: r,
content: s
})
}
forge.message.broadcast
将尝试向每个打开的选项卡发送消息。它只过滤掉chrome-extension
url,因此它也会尝试向任何打开的developer-tools
窗口发送消息。但是,如果选项卡上没有侦听器,您可能会收到“端口错误:无法建立连接。接收端不存在”。Chrome 中每个此类选项卡的错误 -如果您不希望它们响应 forge.message.broadcast 消息,这是预期的并且很好。
如果您确实希望他们做出回应,您必须首先forge.message.listen
在相应的选项卡中使用。