2015-08-15 11 views
0

我正在尝试构建一个功能,需要为用户加载大约200个新窗口,但是在完成加载后关闭它们,或者在我们说10秒后关闭它们。Javascript正在管理多个窗口。打开

但是我知道在同一时间打开很多页面实际上是不可能的,因为它会使客户端的浏览器崩溃。所以我想要做的是管理新的window.opens,以便它只加载五个五。一旦一个页面关闭,它会从队列中加载另一个页面。

这是我到目前为止有:

var loadingQueue = localStorage.loadingQueue ? JSON.parse(localStorage.loadingQueue) : []; 
    var timeToLoad = 10000; 

    var windowArray = []; 
    var self = this; 

    var timedLoading = function() { 
     if (loadingQueue.length > 0 && windowArray.length < 6) { 
     loadingQueue = localStorage.loadingQueue ? JSON.parse(localStorage.loadingQueue) : []; 
     var url = loadingQueue.pop(); 

     localStorage.setItem('loadingQueue', JSON.stringify(loadingQueue)); 
     self.updateLength(); 

     var newWindow = window.open(url, '_blank'); 
     windowArray.push(newWindow); 

     setTimeout(function() { 
      var windowIndex = windowArray.indexOf(newWindow); 
      var curWindow = windowArray.splice(windowIndex, 1); 
      curWindow.close(); 
     }, timeToLoad); 

     setTimeout(timedLoading, 1500); 
     } 
    }; 

    timedLoading(); 

但是页面没有被关闭。我只测试了一页,在设定的时间之后关闭就好了。为什么我不能在很多窗口上做同样的事情?

任何提示是非常感谢。非常感谢

回答

0

我想通了。由于Array.splice()返回一个数组,我需要指定我正在处理的索引。

setTimeout(function() { 
    var windowIndex = windowArray.indexOf(newWindow); 
    var curWindow = windowArray.splice(windowIndex, 1); 
    curWindow[0].close(); 
}, timeToLoad); 

这工作。