1

关于访问被阻止的弹出窗口有很多类似的问题没有一个适合这些情况。

用户流程:

  • 用户点击按钮。

  • 按钮单击触发异步服务器调用。当服务器调用返回(> 1-2 秒)时,JavaScript 代码将打开新窗口(具有相同的域)。

  • 正如其他问题所记录的那样,大多数浏览器都会阻止这个新窗口。

  • 我们当前的解决方法是每 3 秒轮询一次以查看窗口是否打开。这种方法的问题是代码打开了多个窗口,即使我们只想要一个。

  • 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.
}
4

0 回答 0