在Firefox Web扩展中使用chrome.runtime.sendMessage不会产生响应

Using chrome.runtime.sendMessage does not yield a response in Firefox Web Extension

本文关键字:sendMessage 响应 runtime chrome Web Firefox 扩展      更新时间:2023-09-26

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

在后台脚本中:

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

这是WebExtension API中的一个已确认错误,因此对此没有太多可做的事情。