如何在使用window.open时停止浏览器弹出窗口拦截器

问题描述 投票:0回答:2

我正在打印从后端检索的 html。

 printHtml(htmlTemplate) {
    var printWindow = window.open('', '_blank');
    printWindow.document.write(htmlTemplate);
    setTimeout(function () {
        printWindow.document.close(); // necessary for IE >= 10
        printWindow.focus(); // necessary for IE >= 10*/
        printWindow.print();
        printWindow.close();
    }, 1000);
}

这在所有浏览器中都可以正常工作,唯一我不知道的是如何阻止弹出窗口阻止程序。 无法使用 printWindow.location 因为 html 位于变量中。

javascript jquery typescript browser cross-browser
2个回答
0
投票

对于有同样问题的人,
问题是我在 promise 中调用了这个方法,完成后, window.open 有一个新的窗口实例,导致弹出窗口阻止程序。 当我分配时,这工作得很好,

var printWindow = window.open('', '_blank');

在进入 Promise 之前将其设置为全局变量并在方法内部使用它。


0
投票

尽量不要绕过弹出窗口阻止程序,因为弹出窗口阻止程序的主要目的是,单击它时可能会导致重定向(或其他内容),但稍后尝试进行重定向最终将被弹出窗口阻止程序阻止。

这与

window.open
不应该在
setTimeout

中执行的原因相同
© www.soinside.com 2019 - 2024. All rights reserved.