Chrome扩展程序:无法将邮件传递给content.js

时间:2015-09-29 13:29:51

标签: javascript google-chrome-extension

我正在尝试从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

1 个答案:

答案 0 :(得分:1)

您的"matches": ["https://*/","http://*/"],仅指定域通配符,这意味着仅为主页注入内容脚本。您看到的错误消息是因为sendMessage超时了一段时间后因为没有内容脚本来接收消息。

正如the match pattern documentation所说:

  

http://*/*匹配使用http方案的任何网址

正确的代码是"matches": ["https://*/*","http://*/*"],

P.S。利用the debugger,抓住这些错误非常有帮助。