未调用background.js中的Chrome扩展onMessage.addListener

时间:2017-04-08 18:28:56

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

我希望能够将从内容脚本(任何标签页)传达给 背景

根据文档,我应该使用 chrome.extension chrome.runtime.onMessagechrome.runtime.sendMessage

这就是我所做的:

的manifest.json

"background": {
  "scripts": ["background.js"],
  "persistent": false
},
"permissions": [
  "*://*/*"
],

background.js

console.info('1');
chrome.runtime.onMessage.addListener((request, sender, sendReponse) => {
  console.info('2');
  sendReponse({ msg: 'foo' });
  return true;
});

我不太确定return true; is needed。我试着和不试。

构建并重新加载扩展程序后,我通过chrome://extensions

访问了chrome背景页面
> 1 // background.js file was run
> chrome.runtime.sendMessage({ hello: 'so' }, v => console.info(v))
> undefined
> undefined // This is the callback response I get. Why?

更重要的是,当从其他标签运行sendMessage时,我也得到一个空响应回调(例如stackoverflow.com)

> chrome.runtime.sendMessage('extension id', { hello: 'so' }, v => console.info(v))
> undefined
> undefined

为什么我会收到空​​响应回调?

我错过了任何特别许可吗?错误的参数?可能有错误的API函数吗?

1 个答案:

答案 0 :(得分:2)

  1. runtime.sendMessage doesn't send the message到发件人的上下文since Chrome 49

      

    如果发送到您的分机,则会在您的分机的每一帧中触发runtime.onMessage事件(发件人的框架除外),

  2. 网页可以在两种情况下向您的背景/活动页面发送消息:

      manifest.json中的
    • externally_connectable键允许该页面
    • 为该页面加载了扩展程序的内容脚本,在这种情况下,您可以在控制台工具栏中将上下文切换到扩展程序,以便能够从控制台手动发送消息:

      pic

      内容脚本可以在manifest.json中声明,在这种情况下,它会通过[重新]加载页面自动注入。或者您可以使用后台/事件页面中的tabs.executeScript明确注入它。