Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google chrome extension 如何使chrome.tabs.update与内容脚本一起工作_Google Chrome Extension - Fatal编程技术网

Google chrome extension 如何使chrome.tabs.update与内容脚本一起工作

Google chrome extension 如何使chrome.tabs.update与内容脚本一起工作,google-chrome-extension,Google Chrome Extension,我在Google Chrome上做了一个小小的扩展,我想创建一个新标签,打开url“sample”+I+“.com”,在这个url上启动一个内容脚本,将当前标签更新为“sample”+(I+1)+“.com”,然后启动相同的脚本。我查看了stackoverflow上可用的问答,并用谷歌搜索了一下,但没有找到一个有效的解决方案。这是我的background.js代码(它可以工作),它创建了两个选项卡(i=21和i=22)并为每个url加载我的内容脚本,当我尝试执行chrome.tabs.updat

我在Google Chrome上做了一个小小的扩展,我想创建一个新标签,打开url“sample”+I+“.com”,在这个url上启动一个内容脚本,将当前标签更新为“sample”+(I+1)+“.com”,然后启动相同的脚本。我查看了stackoverflow上可用的问答,并用谷歌搜索了一下,但没有找到一个有效的解决方案。这是我的background.js代码(它可以工作),它创建了两个选项卡(i=21和i=22)并为每个url加载我的内容脚本,当我尝试执行chrome.tabs.update时,chrome直接启动i=22的选项卡(脚本只工作一次):

函数提取(选项卡){

对于(var i=21;i我猜
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);});
var func=函数(i)
{
chrome.storage.sync.set({'extraction':1},function(){});//用于我的内容脚本
chrome.tabs.create({url:http://example.com/“+i+”.html“},函数(){});
}
函数提取(选项卡){

对于(var i=21;i,在将选项卡更新到下一个url之前,您需要确保选项卡已完成加载,并且内容脚本已完成运行。实现这一点的一种方法是将消息从内容脚本发送到后台页面。您可以在内容脚本中包含以下内容:

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"});
var电流=21,end=23;
chrome.extension.onMessage.addListener(
功能(请求、发送方){

如果(request==“finished”&¤t它可以工作,但这不是我看到的答案,我想转换“chrome.tabs.update”中的“chrome.tabs.create”,并在每次扩展更改url时仍然启动内容脚本。如果添加“http://example.com/*”(带星号)如果我转换chrome.tabs.create({url:},function(){});在chrome.tabs.update(tab.id,{url:},function(){})中,则chrome将始终嵌入您的脚本,无论url是什么。该脚本仅适用于最后一页。
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"});