2015-08-15 5 views
0

Я пытаюсь создать функциональность, которая должна загружать пользователю около 200 новых окон, но закрывайте их, когда они будут загружены, или, скажем, через 10 секунд.Javascript, управляющий несколькими window.open

Однако я знаю, что открытие того, что многие страницы одновременно невозможно, поскольку это приведет к сбою браузера клиента. Так что я пытаюсь сделать, это управлять новым 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); 

это сработало.