0

我希望能够从内容脚本(任何标签)背景沟通Chrome扩展onMessage.addListener在background.js不会被调用

根据文件,我应该使用 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

> 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? 

更重要的访问镀铬背景页,我也从其他选项卡(即stackoverflow.com)

> chrome.runtime.sendMessage('extension id', { hello: 'so' }, v => console.info(v)) 
> undefined 
> undefined 
运行时的sendMessage得到一个空的响应回调

为什么我会得到一个空响应回调?

我是否缺少特别许可?错误的参数?也许错误的API函数这样做?

+1

至于'返回TRUE',它仅在需要时响应从一个[异步执行的代码]传送(https://stackoverflow.com/a/14220323)。 – wOxxOm

回答

2
  1. runtime.sendMessage doesn't send the message发送者的情况下since Chrome 49

    如果发送给您的延长,runtime.onMessage活动将在您的分机的每一帧发射(除发送方的帧),

  2. 网页可以发送邮件到你的背景/事件在两种情况下页:manifest.json中

    • externally_connectable键允许该页
    • 扩展的内容脚本加载˚F或页面,在这种情况下,你可以上下文切换到控制台工具栏在你的扩展能够从控制台手动发送消息:

      pic

      内容脚本可以在manifest.json的声明中,它通过[re]加载页面自动注入。或者您可以从后台/活动页面中以tabs.executeScript明确注入它。

相关问题