我做了文档中的内容,但在后台页面中显示Cannot read property 'farewell' of undefined
错误。
我的background.js
chrome.tabs.query({active: true, currentWindow: true}, function(tabs) {
chrome.tabs.sendMessage(tabs[0].id, {greeting: "hello"}, function(response) {
console.log(response.farewell);
console.log('ytr');
});
});
发送消息是因为我的console.log('test')打印出来了。
我的contentScript.js看起来像这样
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"});
});
我确实在manifest.json中声明了权限标签和activeTab。我还错过了什么?
答案 0 :(得分:1)
如果response
未定义(并且"无法读取属性...未定义" 意味着),则发送错误消息。
在这种情况下,Chrome会使用response == undefined
调用回调并设置chrome.runtime.lastError
。
您需要检查错误值:
chrome.tabs.query({active: true, currentWindow: true}, function(tabs) {
chrome.tabs.sendMessage(tabs[0].id, {greeting: "hello"}, function(response) {
if(chrome.runtime.lastError) {
console.error(chrome.runtime.lastError.message);
return;
}
console.log(response.farewell);
console.log('ytr');
});
});
我的赌注是 - 你的内容脚本不知何故没有正确注入。有关指示,请参阅this answer。