Google chrome extension Chrome扩展中PageAction、后台页面和ContentScript之间的通信
据我所知,页面操作和Coent脚本之间无法直接通信,因此我这样做: 在page_action.html中:Google chrome extension Chrome扩展中PageAction、后台页面和ContentScript之间的通信,google-chrome-extension,Google Chrome Extension,据我所知,页面操作和Coent脚本之间无法直接通信,因此我这样做: 在page_action.html中: chrome.extension.sendRequest( {to:"background",key:"color",val:"red"}, function(response) { console.log(response) ; } ) ; 在background.js中 chrome.extension.onRequest.addListene
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) ;
}) ;
}
}
) ;
(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'}) ;
}
}
) ;
}()) ;
chrome.runtime.onMessage.addListener(function(message,sender,sendResponse){
//Do stuff here
//sendResponse({message:"stuff"});
});
在content.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) ;
}) ;
}
}
) ;
(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'}) ;
}
}
) ;
}()) ;
chrome.runtime.onMessage.addListener(function(message,sender,sendResponse){
//Do stuff here
//sendResponse({message:"stuff"});
});
页面操作和背景之间的通信工作得很好,但背景和内容脚本之间什么也没有发生。我错过了什么?如何正确地相互沟通?最重要的是,有没有另一种方法可以让交流更直接地从页面动作到内容脚本?幸运的是,有一种方法可以直接在
页面动作
和内容脚本
之间进行交流,这将是通过该方法实现的
您可以从chrome.tabs.query中或从chrome.tabs.query中获取id
一旦您有了要向其发送消息的选项卡的ID,只需通过页面操作
发送消息,如下所示:
page\u 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.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) ;
}) ;
}
}
) ;
(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'}) ;
}
}
) ;
}()) ;
chrome.runtime.onMessage.addListener(function(message,sender,sendResponse){
//Do stuff here
//sendResponse({message:"stuff"});
});
另一方面,
sendRequest
和onRequest
已被它们的对应项所取代。幸运的是,有一种方法可以在页面操作
和内容脚本
之间直接通信,这将通过该方法实现
您可以从chrome.tabs.query中或从chrome.tabs.query中获取id
一旦您有了要向其发送消息的选项卡的ID,只需通过页面操作
发送消息,如下所示:
page\u 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.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) ;
}) ;
}
}
) ;
(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'}) ;
}
}
) ;
}()) ;
chrome.runtime.onMessage.addListener(function(message,sender,sendResponse){
//Do stuff here
//sendResponse({message:"stuff"});
});
另一方面,
sendRequest
和onRequest
已被替换为它们的对应项。谢谢!工作起来很有魅力!只是没有“tabId”,只有“id”:@Digerkam这就是我从内存中输入的结果。谢谢你指出这一点,我的荣幸。如果你做过类似的实验,我可以请你看看这个问题吗:再次感谢你!非常感谢。工作起来很有魅力!只是没有“tabId”,只有“id”:@Digerkam这就是我从内存中输入的结果。谢谢你指出这一点,我的荣幸。如果你做过类似的实验,我可以请你看看这个问题吗:再次感谢你!