我正在尝试编写一个使用后台脚本和交叉通信弹出窗口的跨浏览器扩展程序:
在后台脚本中:
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之间有什么区别吗?根据我在the docs中的内容,应完全支持runtime.sendMessage
API。
FWIW,这是一个展示问题的示例存储库:https://github.com/m90/firefox-webextension-issue