关于访问被阻止的弹出窗口有很多类似的问题,但没有一个适合这些情况。
用户流程:
用户点击按钮。
按钮单击触发异步服务器调用。当服务器调用返回(> 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.
}