未捕获(承诺中)错误:侦听器通过返回 true 指示异步响应,但消息通道在响应之前关闭

问题描述 投票:0回答:1

我在background.js 中发现“未捕获(承诺中)错误:侦听器通过返回 true 指示异步响应,但消息通道在收到响应之前关闭”错误。我的 chrome 扩展可以工作,但开发工具在 background.js 上显示很多此类错误 我最近将我的 chrome 扩展从 Manifest V2 迁移到 Manifest V3,从那时起我发现了错误。

这就是错误似乎产生的地方:

const browser = chrome || browser; // Listen for messages from content script browser.runtime.onMessage.addListener( function (request, sender, sendResponse) { var frameId = sender.frameId || 0; if (request.type == "connect") { connect(sender.tab, frameId); sendResponse({ success: true }); } else if (request.type == "disconnect") { disconnect(sender.tab, frameId); sendResponse({ success: true }); } else if (request.type == "send") { sendNativeMessage(request.data, sender.tab); document.addEventListener('nativeMessage', function handleNativeMessage(e) { sendResponse(e.detail); document.removeEventListener(e.type, handleNativeMessage); }, false); sendResponse({}); return true; } });

发送响应在 ContentScript 中处理:

const browser = chrome || browser; self.addEventListener("message", function(event){ var request = event.data; if(request != null && request.type == "SendMessage") { ProcessNativeMessage(request.data); } }); function ProcessNativeMessage(nativeMessageData) { var request = new Object(); request.data = nativeMessageData; browser.runtime.sendMessage(request,handleExtensionResponse); } function handleExtensionResponse(value) { //alert(value); };

我尝试过返回 true、返回 false、返回未定义、发送空响应,甚至禁用其他扩展,但这些更改都不起作用。

我什至尝试按照建议使用 async/await 更改代码

here

,但这没有什么区别。

javascript google-chrome-extension promise chrome-extension-manifest-v3 chrome-native-messaging
1个回答
-2
投票
无论如何,我无法使用本机消息传递来重现扩展。


const browser = chrome || browser; var globSendResp, globReqTypeSend; //(*) // Listen for messages from content script browser.runtime.onMessage.addListener(function(request, sender, sendResponse) { var frameId = sender.frameId || 0; globReqTypeSend = false; //(*) if (request.type == "connect") { connect(sender.tab, frameId); sendResponse({ success: true }); } else if (request.type == "disconnect") { disconnect(sender.tab, frameId); sendResponse({ success: true }); } else if (request.type == "send") { globReqTypeSend = true; //(*) globSendResp = sendResponse; //(*) sendNativeMessage(request.data, sender.tab); //sendResponse({}); //(*) return true; } }); document.addEventListener('nativeMessage', function handleNativeMessage(e) { if (globReqTypeSend) globSendResp(e.detail) }, false);

© www.soinside.com 2019 - 2024. All rights reserved.