为什么forge.message.broadcast导致`端口错误:无法建立连接。 Chrome中不存在接收端。

时间:2012-10-15 04:47:19

标签: trigger.io

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

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

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

1 个答案:

答案 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