“未经检查的 runtime.lastError:消息端口在收到响应之前关闭。” Chrome 扩展程序
Posted
技术标签:
【中文标题】“未经检查的 runtime.lastError:消息端口在收到响应之前关闭。” Chrome 扩展程序【英文标题】:"Unchecked runtime.lastError: The message port closed before a response was received." Chrome extension 【发布时间】:2021-02-15 16:01:38 【问题描述】:我正在构建一个 chrome 扩展,并试图在我的背景和内容脚本之间建立连接,但 `chrome.runtime.lastError 设置为:
The message port closed before a response was received.
我遵循了这个解决方案How to implement "return true;"? Error: "The message port closed before a response was received.",并添加了“return true”以将其标记为异步以保持端口打开,但仍然出现错误。这是我的代码
bacground.js
chrome.tabs.onUpdated.addListener((tabId, changeInfo, tab) =>
var message = message: "tab has been updated, read html from tab" ;
chrome.tabs.sendMessage(tabId, message);
//send second message
chrome.tabs.sendMessage(
tabId,
tabCreated: "true" ,
function (response)
if (chrome.runtime.lastError)
console.log(chrome.runtime.lastError)
console.log("received response from context page", response)
contextPageWidth = response.pageWidth
);
);
content.js
chrome.runtime.onMessage.addListener((request, sendResponse) =>
sendResponse(pageWidth:"100")
return true;
);
有人知道我哪里出错了吗?
【问题讨论】:
这基本上是一个错字:您在request
之后错过了sender
参数,请参阅文档。顺便说一句,您在这里不需要return true
。同时删除第一个 chrome.tabs.sendMessage(tabId, message);
【参考方案1】:
您需要像这样将“sender”参数添加到您的事件侦听器中:
chrome.runtime.onMessage.addListener((request, sender, sendResponse) =>
sendResponse(message:foo)
return true;
);
更多文档请访问:https://developer.chrome.com/docs/extensions/mv3/messaging/
【讨论】:
以上是关于“未经检查的 runtime.lastError:消息端口在收到响应之前关闭。” Chrome 扩展程序的主要内容,如果未能解决你的问题,请参考以下文章