Javascript 将消息发送到Chrome扩展中的内容脚本
我试图将一条消息从后台脚本发送到内容脚本,但失败了 以下是我在后台脚本中的代码:Javascript 将消息发送到Chrome扩展中的内容脚本,javascript,jquery,google-chrome-extension,Javascript,Jquery,Google Chrome Extension,我试图将一条消息从后台脚本发送到内容脚本,但失败了 以下是我在后台脚本中的代码: iterator=0; chrome.tabs.query({},function(tabs){ for(var i=0; i<tabs.length; i=i+1){ chrome.tabs.executeScript(tabs[i].id,{file: 'createBanner.js'}); } for (var i=0;
iterator=0;
chrome.tabs.query({},function(tabs){
for(var i=0; i<tabs.length; i=i+1){
chrome.tabs.executeScript(tabs[i].id,{file: 'createBanner.js'});
}
for (var i=0; i<tabs.length; i=i+1){
chrome.tabs.sendMessage(tabs[i].id,{
action: "currentPicNumber",picNumber: iterator
});
}
});
当我运行它时,控制台不会显示任何内容。我希望能够在createBanner.js和我的后台脚本之间来回发送消息
请帮我谢谢你你的
manifest.json是什么样子的?createBanner.js是否列在content\u脚本中?如果是这样,您将能够在每个页面上执行它,而无需为每个选项卡手动注入executeScript
。
e、 g.(舱单中)
chrome.tabs.executeScript
是异步的。调用sendMessage
时,脚本尚未准备好接收它
您可以为executeScript
指定回调,该回调仅在执行注入的JavaScript(即注册处理程序)后运行。为了使clojure正常工作,我使用了一个返回回调函数的高阶函数messageCallback
因此,您的代码如下所示:
function messageCallback(tabId, picNumber){
return function(){
chrome.tabs.sendMessage(
tabId,
{action: "currentPicNumber", picNumber: picNumber}
);
};
}
chrome.browserAction.onClicked.addListener( function(){
chrome.tabs.query({},function(tabs){
for(i in tabs){
chrome.tabs.executeScript(
tabs[i].id,
{file: 'createBanner.js'},
messageCallback(tabs[i].id, iterator)
);
}
});
});
这不起作用,因为回调是在所有javascript执行之后执行的。这是我在运行此TypeError后遇到的错误:无法读取的属性“id”undefined@user3450622给我一点时间test@user3450622这对我很有效,但不是我想要的方式。我不及格!我将更新代码。@user3450622,我已经修复了。
"content_scripts": [
{
"matches": ["http://*/*", "https://*/*"],
"js": ["createBanner.js"]
}
]
function messageCallback(tabId, picNumber){
return function(){
chrome.tabs.sendMessage(
tabId,
{action: "currentPicNumber", picNumber: picNumber}
);
};
}
chrome.browserAction.onClicked.addListener( function(){
chrome.tabs.query({},function(tabs){
for(i in tabs){
chrome.tabs.executeScript(
tabs[i].id,
{file: 'createBanner.js'},
messageCallback(tabs[i].id, iterator)
);
}
});
});