Открыть несколько окон в цикле

#javascript

#javascript

Вопрос:

У меня возникают проблемы с открытием нескольких окон в правильном порядке, независимо от того, что я пытаюсь, он открывает все окна одновременно, что может составлять сотни серверов. Я пытаюсь открыть одно окно, что-то сделать, закрыть окно, повторять, пока все не откроются.

 var mission = document.querySelectorAll('a[href*="/missions"]');
var i;

document.getElementById("sharebtnalliance").onclick = function shareMission(){
    for(i = 0; i < mission.length; i  ){
        window.open(mission[i], "", "height: 80%; width: 80%;");
        setTimeout(function() {
            window.close();
        }, 5000);
    }
}
 

Задержка, похоже, не наступает, 5 секунд будет достаточно, чтобы сделать то, что нужно сделать, прежде чем открывать следующий URL, но она также не закрывает их — может быть, потому, что браузер изо всех сил пытается справиться с таким количеством открывающихся страниц.

Ответ №1:

Я лично не стал бы использовать тайм-аут, вам, вероятно, следует дождаться закрытия окна с помощью чего-то вроде этого: N.B. Это будет работать только в том случае, если URL-адреса находятся в одном домене.

ПРЕДОСТЕРЕЖЕНИЕ: ЭТО НЕ БЫЛО ПРОТЕСТИРОВАНО И МОЖЕТ ПОТРЕБОВАТЬ НЕКОТОРОЙ ОТЛАДКИ

 var mission = document.querySelectorAll('a[href*="/missions"]');

document.getElementById("sharebtnalliance").onclick = async function shareMission(){
    for(let i = 0; i < mission.length; i  ){
        await openWindowAsync(mission[i]);
    }
}

function openWindowAsync(url){
     return new Promise(resolve => {
         const w = window.open(url, "", "height: 80%; width: 80%;");
         w.addEventListener('close', resolve);
     });
} 

Комментарии:

1. Спасибо — все URL-адреса находятся в одном домене. Я проверю это сейчас.

2. Я получаю неожиданный токен на await openWindow(mission[i]);

3. Проверьте имя функции, в моем примере это неправильно — ИСПРАВЛЕНО

4. Даже после вашего редактирования (я также пробовал это) я получаю ту же ошибку

5. В каком браузере (и версии) вы пытаетесь это сделать?