我正在尝试编写一个跨浏览器扩展,它使用一个后台脚本和一个交叉通信的弹出窗口:
在后台脚本中:
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