2015-08-15 37 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); 

這工作。