2012-08-11 72 views
1

我想根据数组中的URL创建新标签,但是在这个过程中,我需要脚本等待新标签中的页面先载入或等待几秒钟后关闭该选项卡并在第一个关闭后创建一个新选项卡。基于数组内容打开和关闭标签,延迟

目前此代码将一次创建新标签,然后close.js脚本将在几秒钟后关闭标签。因此,如果我的数组中有50个网址,则会一次创建50个新的标签,这很糟糕。我需要一次创建并关闭一个标签,而不是一次全部关闭。

我曾尝试使用chrome.tabs.query状态参数来解决此问题,但此状态参数似乎只与选项卡加载状态有关,而不是页面状态。

任何人有一些想法?

var jsonObject = xhr.responseText; 
var obj = jQuery.parseJSON(jsonObject); 
for (var i = 0; i < obj.url.length; i++) { 
    chrome.tabs.create({"url":obj.url[i],"selected":false},function(tab){ 
     var createdTabId = tab.id; 
     chrome.tabs.executeScript(createdTabId, {file: "js/close.js"}); 
    }); 
} 
+0

使用一个堆栈或递归。 – 2012-08-11 14:21:47

+0

修改标题;请。 – SiB 2012-08-11 14:25:44

回答

1

实测值的溶液:

var jsonObject = xhr.responseText; 
var obj = jQuery.parseJSON(jsonObject); 
var timeout = 0; 
var urlcount = 0;  

for (var i = 0; i < obj.url.length; i++) { 
    setTimeout(function(){ 
     chrome.tabs.create({"url":obj.url[urlcount],"selected":false},function(tab){ 
     var createdTabId = tab.id; 
     chrome.tabs.executeScript(createdTabId, {file: "js/close.js"}); 
     }); 
     urlcount++; 
    },timeout); // put the timeout here 
    timeout = timeout + 2000; 
}