onMessage没有在chrome扩展的内容脚本中调用

时间:2014-07-23 05:21:54

标签: javascript google-chrome-extension

我正在尝试开发Chrome扩展程序。我正在尝试从后台脚本向内容脚本发送消息。我尝试了以下代码:

清单

{
    ....
    "background": {
        "scripts": ["background.js"]
    },
    "content_scripts": [
        {
            "matches": ["http://myurl.com", "http://myurl.com"],
            "js": ["content.js"],
            "run_at": "document_end"
        }
    ]
....
}

后台脚本:

chrome.tabs.query({active: true, currentWindow: true}, function(tabs) {
  console.log("inside");
  chrome.tabs.sendMessage(tabs[0].id, {greeting: "hello"}, function(response) {
    console.log("Response");
  });
});

内容脚本:

chrome.runtime.onMessage.addListener(
  function(request, sender, sendResponse) {
    console.log("From Background Script: " + console.greeting);
    return true;
  });
我检查了控制台。 “内部”和“响应”被记录,但不是“从背景脚本......”

可能是什么问题?

1 个答案:

答案 0 :(得分:0)

你的chrome.tabs.query是在非常会话开始时执行的,并在那一刻发送消息......你需要将它包装在某些事件中,比如

chrome.tabs.onUpdated.addListener(function(tabId, changeInfo, tab) {
    if (tab.url == "http://www.myurl.com") {
        chrome.tabs.sendMessage(tab.id, {greeting: "hello"}, function(response) {
            console.log("Response");
        });
    } 
}); 

实际上你并不需要tabs.querry ...你从chrome.tabs.onUpdated监听器获得ID以发送消息