据我所知,没有办法直接在Page Action和Cotent Script之间进行通信,所以我这样做:
在 page_action.html :
chrome.extension.sendRequest(
{to:"background",key:"color",val:"red"},
function(response) {
console.log(response) ;
}
) ;
在 background.js
中chrome.extension.onRequest.addListener(
function(request,sender,sendResponse) {
if (request.to == "background") {
console.log("Request recieved to Background") ;
request.to = "content" ;
chrome.extension.sendRequest(request,function(response) {
sendResponse(response) ;
}) ;
}
}
) ;
在 content.js
中(function(){
// ...
// Do something initial
// ...
// Now start to listen
chrome.extension.onRequest.addListener(
function(request,sender,sendResponse) {
if (request.to == "content") {
// Do something with request.key and request.val
console.log("Request recieved to Content Script") ;
sendResponse({status:'from content'}) ;
}
}
) ;
}()) ;
页面操作和背景之间的通信工作完美,但背景和内容脚本之间没有任何关系。我在这里错过了什么?如何正确沟通?最重要的是,还有另一种方式可以让您更直接地从Page Action到Content Script进行沟通吗?
答案 0 :(得分:5)
幸运的是,有一种方法可以直接在Page Action
和Content Script
之间进行通信,这可能是tabs.sendMessage
方法。
您可以从chrome.pageAction.onClicked
或从简单id
获取chrome.tabs.query
。
获得要发送消息的标签的ID后,只需从Page Action
发送消息,如下所示:
<强> page_action.html 强>
chrome.tabs.query({active:true,currentWindow:true},function(tabs){
chrome.tabs.sendMessage(tabs[0].id,{message:"text"}, function(response){
//If you need a response, do stuff with it here
});
});
<强> content.js 强>
chrome.runtime.onMessage.addListener(function(message,sender,sendResponse){
//Do stuff here
//sendResponse({message:"stuff"});
});
在旁注中,sendRequest
和onRequest
已替换为Message
对应方。