【发布时间】:2026-02-24 03:55:02
【问题描述】:
这是我的活动页面中的代码:
chrome.runtime.onInstalled.addListener(function (){
chrome.contextMenus.create
({
"title": "Test",
"contexts": ["all"],
"id": "menu"
});
chrome.contextMenus.create
({
"title": "Dummy",
"contexts": ["all"],
"id": "dummy",
"parentId": "menu"
});
});
chrome.contextMenus.onClicked.addListener(onClickHandler);
function onClickHandler (info, tab) {
if(info.menuItemId == "dummy"){
chrome.tabs.sendMessage(tab.id, {greeting: "hello"}, function(response) {
console.log(response.farewell);
});
}
}
这是我的内容脚本中的代码,直接来自 chrome 消息传递文档:
chrome.runtime.onMessage.addListener(
function(request, sender, sendResponse) {
console.log(sender.tab ?
"from a content script:" + sender.tab.url :
"from the extension");
if (request.greeting == "hello")
sendResponse({farewell: "goodbye"});
});
事件页面中的 onClickHandler 正在被触发,但是 sendMessage 方法似乎不起作用。 onMessage 侦听器没有接收任何信息,因此它不会将任何内容记录到控制台,甚至不会发送响应。这会导致原始的 sendMessage 回调抛出异常,因为 response.farewell 甚至没有定义。有谁知道为什么代码似乎不起作用。
错误:
Error in event handler for (unknown): TypeError: Cannot read property 'farewell' of undefined
【问题讨论】:
-
可能与这个重复:*.com/questions/26296181/…
-
@gui47 不是重复的,因为我已经使用 tabs.sendMessage 而不是 runtime.sendMessage,这是他们犯的错误。
标签: javascript google-chrome google-chrome-extension