内容脚本中的chrome.runtime.sendMessage不发送消息

dAn*_*jou 9 javascript google-chrome-extension

我有以下文件(gist易于访问):

的manifest.json

{
  "name": "testmessage",
  "version": "0.1",
  "manifest_version": 2,
  "externally_connectable": {
    "matches": ["*://www.google.com/*"]
  },
  "background": {
    "scripts": ["background.js"],
    "persistent": true
  },
  "content_scripts": [
    {
      "matches": ["*://www.google.com/*"],
      "js": ["content.js"]
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

content.js

chrome.runtime.sendMessage(
    "eldkfaboijfanbdjdkohlfpoffdiehnb", // PUT YOUR EXTENSION ID HERE
    "foo",
    function (response) {
        console.log(response);
    }
);
console.log("this is content.js reporting for duty");
Run Code Online (Sandbox Code Playgroud)

background.js

chrome.runtime.onMessageExternal.addListener(
    function(request, sender, sendResponse) {
        console.log("background.js got a message")
        console.log(request);
        console.log(sender);
        sendResponse("bar");
    }
);
console.log("this is background.js reporting for duty");
Run Code Online (Sandbox Code Playgroud)

我可以在各自的控制台中看到"......报告职责"消息.但是background.jshttp://www.google.com加载时没有收到消息.第5行content.js打印undefined在google.com的控制台中.

当我chrome.runtime.sendMessage("eldkfaboijfanbdjdkohlfpoffdiehnb", "foo");在google.com控制台中运行时,它会显示在background.js控制台中.

我究竟做错了什么?

Xan*_*Xan 23

你做错了什么让它过于复杂.两次.

首先,您不需要声明可外部连接,因为您从内容脚本而不是网页本身发送消息.

其次,它也不是外部信息.外部邮件用于连接不同的扩展,而不是一个扩展中的邮件.

您的代码应如下所示:

content.js

chrome.runtime.sendMessage(
    "foo",
    function (response) {
        console.log(response);
    }
);
Run Code Online (Sandbox Code Playgroud)

background.js

chrome.runtime.onMessage.addListener(
    function(request, sender, sendResponse) {
        console.log("background.js got a message")
        console.log(request);
        console.log(sender);
        sendResponse("bar");
    }
);
Run Code Online (Sandbox Code Playgroud)