我在谷歌浏览器上进行了一些扩展,我想创建一个新选项卡,继续使用网址“示例”+ i +“。com”,在此网址上启动内容脚本,将当前标签更新为“示例” “+(i + 1)+”。com“,并启动相同的脚本。我在stackoverflow上看了Q& A,我谷歌但是我没有找到合适的解决方案。这是我实际的background.js代码(它有效),它创建了两个选项卡(i = 21和i = 22)并为每个url加载我的内容脚本,当我尝试执行chrome.tabs.update Chrome直接启动时一个i = 22的选项卡(脚本只能运行一次):
function extraction(tab) {
for (var i =21; i<23;i++)
{
chrome.storage.sync.set({'extraction' : 1}, function() {}); //for my content script
chrome.tabs.create({url: "http://example.com/"+i+".html"}, function() {});
}
}
chrome.browserAction.onClicked.addListener(function(tab) {extraction(tab);});
如果有人可以帮助我,内容脚本和manifest.json不是问题。我想做那15000次,所以我不能这样做。
谢谢。
答案 0 :(得分:0)
我猜chrome.tabs.create
是一个异步函数,因此您需要创建一个单独的函数,以便每次都复制i
变量:
试试这个:
var func = function(i)
{
chrome.storage.sync.set({'extraction' : 1}, function() {}); //for my content script
chrome.tabs.create({url: "http://example.com/"+i+".html"}, function() {});
}
function extraction(tab) {
for (var i =21; i<23;i++)
{
func(i);
}
}
chrome.browserAction.onClicked.addListener(function(tab) {extraction(tab);});
答案 1 :(得分:0)
在将标签更新为下一个网址之前,您需要确保标签已完成加载,并且内容脚本已完成运行。实现这一目标的一种方法是通过从内容脚本向后台页面发送消息。您可以在内容脚本中包含以下内容:
chrome.extension.sendMessage("finished");
在后台脚本中,您可以执行以下操作:
var current = 21, end = 23;
chrome.extension.onMessage.addListener(
function(request, sender) {
if( request == "finished" && current <= end ) {
chrome.tabs.update( sender.tab.id,
{url: "http://example.com/"+current+".html"});
current++;
}
}
);
chrome.tabs.create({url: "http://example.com/"+current+".html"});