我试图在内容脚本和扩展名之间传递消息
这是我在content-script中的内容
chrome.runtime.sendMessage({type: "getUrls"}, function(response) {
console.log(response)
});
Run Code Online (Sandbox Code Playgroud)
在我的后台脚本中
chrome.runtime.onMessage.addListener(
function(request, sender, sendResponse) {
if (request.type == "getUrls"){
getUrls(request, sender, sendResponse)
}
});
function getUrls(request, sender, sendResponse){
var resp = sendResponse;
$.ajax({
url: "http://localhost:3000/urls",
method: 'GET',
success: function(d){
resp({urls: d})
}
});
}
Run Code Online (Sandbox Code Playgroud)
现在,如果我在getUrls函数中的ajax调用之前发送响应,则响应成功发送,但是当我发送响应时,在ajax调用的success方法中它不发送它,当我进入调试时我可以看到sendResponse函数代码中的端口为null .
javascript google-chrome google-chrome-extension google-chrome-app
我在 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 …Run Code Online (Sandbox Code Playgroud) javascript google-chrome-extension promise chrome-native-messaging chrome-extension-manifest-v3