Есть много похожих вопросов, таких как this и this о доступе к заблокированному всплывающему окну windows, но ни один из них не соответствует этим обстоятельствам.
Поток пользователей:
Пользователь нажимает кнопку.
Нажатие кнопки запускает асинхронный c вызов сервера. Когда сервер возвращается (> 1-2 секунды), код JavaScript открывает новое окно (с тем же доменом).
Большинство браузеров блокируют это новое окно, как задокументировано другими вопросами.
Наш текущий обходной путь - опрос каждые 3 секунды, чтобы видеть, открыто ли окно. Проблема этого подхода в том, что код открывается несколько раз windows, хотя нам нужен только один.
Использование window.opener
во вновь открытом окне кажется ненадежным, так как некоторые ответы предполагают window.opener
не всегда доступен в FireFox и Safari.
Отсюда возникает вопрос: существует ли оконное событие, на которое мы можем подписаться, которое вызывается, когда заблокированное всплывающее окно наконец открывается?
В конечном счете, цель - вызвать код в новом окне, как только оно откроется и будет готово.
var DownloadWindow = window.open("newURL", "uniqueWindowID");
*** 1-2 seconds later ***
startTest();
function startTest() {
// <DownloadWindow> doesn't exist yet? Set timeout and check back later.
var delayDur = 3000;
if (!DownloadWindow) {
DownloadWindow = openDownloadWindow();
setTimeout(startTest, delayDur);
return;
}
// Do stuff.
}