我的问题是,我似乎无法从我的popup.js传递到我的content.js的消息chrome.extension.sendMessage("on");
。
popup.js中的代码:
function click(e) {
if ( e.target.id == "green"){
chrome.extension.sendMessage("start");
console.info("oN");
return;
}
if ( e.target.id == "red"){
chrome.extension.sendMessage("stop");
console.info("oFF");
return;
}
}
当我向代码添加一个监听器时,popup.js会很好地收到消息。但我的content.js似乎无法得到它。
来自content.js的代码:
chrome.extension.onMessage.addListener(
function(request, sender, sendResponse) {
console.info("ok");
}
);
清单:
"content_scripts": [
{
"matches": ["<all_urls>"],
"js": ["content.js"],
"run_at": "document_end"
}
],
非常感谢任何帮助。
答案 0 :(得分:2)
chrome.extension.sendMessage
是一个非规范名称。
旧的,已弃用的API为chrome.extension.sendRequest
,新API为chrome.runtime.sendMessage
,事件同样为chrome.runtime.onMessage
。
也就是说,您的问题是尝试向内容脚本发送消息。 chrome.runtime.sendMessage
向分机自己的网页发送消息;内容脚本不被认为是这样的。
要向内容脚本发送消息,您必须使用chrome.tabs.sendMessage
API call标签tabId
。
假设您想要当前的可见标签:
function click(e) {
if ( e.target.id == "green"){
chrome.tabs.query({active:true, currentWindow: true}, function(tabs){
chrome.tabs.sendMessage(tabs[0].id, "start");
});
console.info("oN");
return;
}
/* ... */
}
如果您想要所有标签,只需将{}
传递给query
并重复tabs
。