我想在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"
]
}
我读了很多书,但我不明白为什么它不起作用? 我可以帮忙吗?方向?评论?
答案 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
并刷新页面。