1

每当我使用 forge.message.broadcast 时,我都会立即看到一堆错误:

Port error: Could not establish connection. Receiving end does not exist.

它似乎与打开的选项卡数量 + 打开的开发者控制台的数量直接相关。但是,没有任何堆栈跟踪,似乎无法追踪。

4

1 回答 1

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-extensionurl,因此它也会尝试向任何打开的developer-tools窗口发送消息。但是,如果选项卡上没有侦听器,您可能会收到“端口错误:无法建立连接。接收端不存在”。Chrome 中每个此类选项卡的错误 -如果您不希望它们响应 forge.message.broadcast 消息,这是预期的并且很好。

如果您确实希望他们做出回应,您必须首先forge.message.listen在相应的选项卡中使用。

于 2012-10-15T04:47:18.930 回答