我正在尝试从background.js向content.js发送消息。
content.js中的addListener
无效。
background.js
chrome.tabs.onUpdated.addListener(function(tabId, changeInfo, tab)
{
console.log(tab.url);
if(changeInfo.status=="complete"){
chrome.tabs.query({active: true, currentWindow: true}, function(tabs) {
if(tabs.length!=0){
chrome.tabs.sendMessage(tabs[0].id, {message: "sendurl"}, function(response) {
console.log(response.url);
});
}
});
console.log("load complete");
}
});
content.js
chrome.runtime.onMessage.addListener(
function(request, sender, sendResponse) {
if( request.message === "sendurl" ) {
var firstHref = $("a[href^='http']").eq(0).attr("href");
console.log(firstHref);
sendResponse({url: firstHref});
}
}
);
的manifest.json
"background": {
"scripts": ["background.js"]
},
"content_scripts": [
{
"matches": ["https://*/","http://*/"],
"js": ["jquery-2.1.4.js","enc-base64-min.js","hmac-sha256.js","content.js"]
}
],
经过一段时间后,它会出错:TypeError: Cannot read property 'url' of undefined
答案 0 :(得分:1)
您的"matches": ["https://*/","http://*/"],
仅指定域通配符,这意味着仅为主页注入内容脚本。您看到的错误消息是因为sendMessage
超时了一段时间后因为没有内容脚本来接收消息。
正如the match pattern documentation所说:
http://*/*
匹配使用http方案的任何网址
正确的代码是"matches": ["https://*/*","http://*/*"],
P.S。利用the debugger,抓住这些错误非常有帮助。