Chrome API:sendMessage无法从内容脚本正确接收到background.js

时间:2015-10-23 04:27:39

标签: javascript google-chrome google-chrome-extension google-chrome-app sendmessage

我正在尝试将content_script.js设置为sendMessage到background.js。 Background.js能够接收消息并对其进行操作,但是content_script.js无法接收/打印出来。

content_script.js

chrome.runtime.sendMessage({method: "getSettings"}, function(response) {
    console.log(response.data);
    console.log("This is not printing either");
});

background.js

chrome.runtime.onMessage.addListener(function(request, sender, sendResponse) {
    if (request.method == "getSettings") {
        chrome.storage.sync.get(null, function (val) {
            sendResponse({data: "test"});
            console.log("Responding: " + val.radioSettings);
        });
    }
});

background.js中的Console.log从chrome.storage打印正确的消息,但我的content_script.js中的console.log永远不会打印。

我觉得这很接近,但只是遗漏了一些小事。这是我的清单的一部分:

的manifest.json

{
  "version": "0.0.1",
  "manifest_version": 2,
  "browser_action": {
    "default_icon": "icons/icon19.png",
    "default_popup": "popup.html"
  },
  "background": {
    "scripts": ["js/background.js"]
  },
  "permissions": [
    "storage",
    "tabs"
  ],
  "content_scripts": [
    {
      "matches": ["<all_urls>"],
      "js": ["js/jquery-1.11.3.min.js", "js/content_script.js"]
    }
  ]
}

1 个答案:

答案 0 :(得分:0)

解决了这个问题 - 感谢重复的问题链接。

为了让其他人更容易,这是另一个答案所说的:

  

来自chrome.runtime.onMessage.addListener的文档:

     

当事件侦听器返回时,此函数变为无效,除非您从事件侦听器返回true 以指示您希望异步发送响应(这将使消息通道保持打开到另一端,直到发送sendResponse)。

     

所以你只需要添加return true;在[addListener]结束之后,表示你将异步调用响应函数。

以下是代码的正确版本:

background.js

chrome.runtime.onMessage.addListener(function(request, sender, sendResponse) {
    if (request.method == "getSettings") {
        chrome.storage.sync.get(null, function (val) {
            sendResponse({data: "test"});
            console.log("Responding: " + val.radioSettings);
        });
    }
    return true;
});