runtime.onMessage.addListener()
是Chrome/Edge扩展API的一部分,用于在扩展的不同组件(如background脚本、content脚本、popup等)之间进行消息通信。
确保监听器在脚本加载后立即注册,且只注册一次:
// background.js
chrome.runtime.onMessage.addListener((message, sender, sendResponse) => {
console.log("Received message:", message);
// 处理消息逻辑
sendResponse({status: "received"});
});
发送消息时需要使用回调处理响应:
// content-script.js
chrome.runtime.sendMessage({action: "doSomething"}, (response) => {
console.log("Received response:", response);
});
确保发送方和接收方在正确的上下文中:
检查manifest.json是否配置正确:
{
"manifest_version": 3,
"background": {
"service_worker": "background.js"
},
"content_scripts": [{
"matches": ["<all_urls>"],
"js": ["content-script.js"]
}]
}
如果需要异步处理消息并返回响应,必须返回true
以保持消息通道开放:
chrome.runtime.onMessage.addListener((message, sender, sendResponse) => {
setTimeout(() => {
sendResponse({data: "Async response"});
}, 1000);
return true; // 保持消息通道开放
});
确保manifest.json中包含必要的权限:
{
"permissions": ["scripting", "activeTab"]
}
try {
chrome.runtime.onMessage.addListener(handler);
} catch (error) {
console.error("Listener registration failed:", error);
}
chrome.runtime.lastError
检查错误:chrome.runtime.sendMessage({...}, (response) => {
if (chrome.runtime.lastError) {
console.error(chrome.runtime.lastError);
}
});
通过以上检查和修正步骤,应该能够解决Edge扩展中runtime.onMessage.addListener()
不响应的问题。