使用 chrome.runtime.sendMessage 不会在 Firefox Web 扩展中产生响应
Using chrome.runtime.sendMessage does not yield a response in Firefox Web Extension
我正在尝试编写一个使用后台脚本和交叉通信的弹出窗口的跨浏览器扩展:
在后台脚本中:
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
这是一个 confirmed bug in the WebExtension API,所以没什么可做的。
我正在尝试编写一个使用后台脚本和交叉通信的弹出窗口的跨浏览器扩展:
在后台脚本中:
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
这是一个 confirmed bug in the WebExtension API,所以没什么可做的。