我正在尝试将content_script.js设置为sendMessage到background.js。 Background.js能够接收消息并对其进行操作,但是content_script.js无法接收/打印出来。
chrome.runtime.sendMessage({method: "getSettings"}, function(response) {
console.log(response.data);
console.log("This is not printing either");
});
chrome.runtime.onMessage.addListener(function(request, sender, sendResponse) {
if (request.method == "getSettings") {
chrome.storage.sync.get(null, function (val) {
sendResponse({data: "test"});
console.log("Responding: " + val.radioSettings);
});
}
});
background.js中的Console.log从chrome.storage打印正确的消息,但我的content_script.js中的console.log永远不会打印。
我觉得这很接近,但只是遗漏了一些小事。这是我的清单的一部分:
{
"version": "0.0.1",
"manifest_version": 2,
"browser_action": {
"default_icon": "icons/icon19.png",
"default_popup": "popup.html"
},
"background": {
"scripts": ["js/background.js"]
},
"permissions": [
"storage",
"tabs"
],
"content_scripts": [
{
"matches": ["<all_urls>"],
"js": ["js/jquery-1.11.3.min.js", "js/content_script.js"]
}
]
}
答案 0 :(得分:0)
解决了这个问题 - 感谢重复的问题链接。
为了让其他人更容易,这是另一个答案所说的:
来自chrome.runtime.onMessage.addListener的文档:
当事件侦听器返回时,此函数变为无效,除非您从事件侦听器返回true 以指示您希望异步发送响应(这将使消息通道保持打开到另一端,直到发送sendResponse)。
所以你只需要添加return true;在[addListener]结束之后,表示你将异步调用响应函数。
以下是代码的正确版本:
chrome.runtime.onMessage.addListener(function(request, sender, sendResponse) {
if (request.method == "getSettings") {
chrome.storage.sync.get(null, function (val) {
sendResponse({data: "test"});
console.log("Responding: " + val.radioSettings);
});
}
return true;
});