每当我使用forge.message.broadcast时,我立即看到一堆错误:
Port error: Could not establish connection. Receiving end does not exist.
它似乎与打开的标签数量+打开的开发者控制台数量直接相关。但是,没有任何堆栈跟踪,似乎无法追踪。
答案 0 :(得分:1)
这是正常的,看看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
个网址,因此它也会尝试向任何打开的developer-tools
窗口发送消息。但是,如果选项卡上没有侦听器,您可能会收到“端口错误:无法建立连接。接收端不存在”。 Chrome中每个此类标签的错误 - 这是预期的,如果 >>您不希望他们响应forge.message.broadcast消息,则会很好。
如果您希望他们回复,您必须首先在相应标签中使用forge.message.listen
。