Событие окна, когда пользователь утверждает, что закрытое всплывающее окно открывается? - PullRequest
1 голос
/ 28 февраля 2020

Есть много похожих вопросов, таких как 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.
}
...