我正在打印从后端检索的 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 位于变量中。
对于有同样问题的人,
问题是我在 promise 中调用了这个方法,完成后,
window.open 有一个新的窗口实例,导致弹出窗口阻止程序。
当我分配时,这工作得很好,
var printWindow = window.open('', '_blank');
在进入 Promise 之前将其设置为全局变量并在方法内部使用它。
尽量不要绕过弹出窗口阻止程序,因为弹出窗口阻止程序的主要目的是,仅单击它时可能会导致重定向(或其他内容),但稍后尝试进行重定向最终将被弹出窗口阻止程序阻止。
这与
window.open
不应该在 setTimeout
中执行的原因相同