chrome扩展背景,js到content.js之间的消息传递

时间:2018-07-14 00:45:04

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

我想在chrome扩展名 background.js content.js 之间发送消息。

背景看起来像这样:

setInterval(function(){
  chrome.tabs.query({active: true}, function(tabs){
    chrome.tabs.sendMessage(tabs[0].id, {"message": "sample_msg"});
 });
},
1000);

content.js看起来像这样:

chrome.runtime.onMessage.addListener(function(message, sender) {
  console.log('blablabla');
});

manifest.json看起来像这样:

{
  "manifest_version": 1,
  "name": "Chrome Extension",
  "description": "",
  "version": "0.0.1",
  "background": {
    "scripts": [
      "/src/background.js"
    ]
  },
  "content_scripts": [
    {
      "matches": [
        "*://google.com/*"
      ],
      "js": [
        "/src/content.js"
      ],
      "all_frames": true
    }
  ],
  "browser_action": {
    "default_popup": "/src/popup.html"
  },
  "permissions": [
    "<all_urls>",
    "activeTab",
    "tabs",
    "cookies",
    "background",
    "contextMenus",
    "unlimitedStorage",
    "storage",
    "notifications",
    "identity",
    "identity.email",
    "webRequest",
    "webRequestBlocking"
  ]
}

我读了很多书,但我不明白为什么它不起作用? 我可以帮忙吗?方向?评论?

1 个答案:

答案 0 :(得分:1)

sendMessage API似乎正确,但是URL匹配似乎存在问题。

您的内容脚本将仅注入清单文件中的google.com键中的matches域中。

  

打开google.com并检查地址栏,您可以看到URL
  https://www.google.com/,因此要将您的内容脚本注入Google域,您需要更改matches

"matches": [
    "https://*.google.com/*"
]

此外,如下更改您的 onMessage 监听器

chrome.runtime.onMessage.addListener( 
  function(request, sender, sendResponse) {
    console.log("Received message", request.message);
  }
);

现在转到google.com并刷新页面。