我希望能够将从内容脚本(任何标签页)传达给 背景。
根据文档,我应该使用 chrome.extension chrome.runtime.onMessage
和chrome.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?
更重要的是,当从其他标签运行sendMessage时,我也得到一个空响应回调(例如stackoverflow.com)
> chrome.runtime.sendMessage('extension id', { hello: 'so' }, v => console.info(v))
> undefined
> undefined
为什么我会收到空响应回调?
我错过了任何特别许可吗?错误的参数?可能有错误的API函数吗?
答案 0 :(得分:2)
runtime.sendMessage doesn't send the message到发件人的上下文since Chrome 49。
如果发送到您的分机,则会在您的分机的每一帧中触发runtime.onMessage事件(发件人的框架除外),
网页可以在两种情况下向您的背景/活动页面发送消息:
为该页面加载了扩展程序的内容脚本,在这种情况下,您可以在控制台工具栏中将上下文切换到扩展程序,以便能够从控制台手动发送消息:
内容脚本可以在manifest.json中声明,在这种情况下,它会通过[重新]加载页面自动注入。或者您可以使用后台/事件页面中的tabs.executeScript明确注入它。