0

我正在尝试编写一个跨浏览器扩展,它使用一个后台脚本和一个交叉通信的弹出窗口:

在后台脚本中:

class Listener{
    listen(cb){
        chrome.runtime.onMessage.addListener((transmission, sender, messageResponseFn) => {
            cb(transmission, messageResponseFn);
            return true;
        });
    }
}

export default new Listener();

在弹出窗口中:

class Emitter{
    send(message, payload){
        return new Promise((resolve, reject) => {
            chrome.runtime.sendMessage({ message, payload }, (responseMessage) => {
                resolve(responseMessage);
            });
        });
    }
}

export default new Emitter();

这在 Chrome 中按预期工作,但在 Firefox 中,发送的响应(该函数被正确调用并且不会抛出)将永远不会到达我的Emitter. 我是不是用错了这个 API?Firefox 和 Chrome 之间有什么我不知道的区别吗?根据我在文档中阅读的内容,runtime.sendMessage应该完全支持 API。

FWIW,这是一个演示该问题的示例存储库:https ://github.com/m90/firefox-webextension-issue

4

1 回答 1

1

这是WebExtension API 中已确认的错误,因此无需多做。

于 2015-12-04T07:56:16.153 回答