我正在尝试打开一个新窗口,其中包含来自文件的html代码,然后打印文档
以下代码有效,即布局显示在新窗口内,但打印文档始终为空白
var FPrint = window.open('layout.php','','left=100,top=10,width=700,height=900');
FPrint.document.close();
FPrint.focus();
FPrint.print();
FPrint.close();
我做错了什么?
是否有人能够提供建议的修复
由于
答案 0 :(得分:0)
您必须等待文档完成加载才能操作文档。我建议这样做:
var FPrint = window.open('layout.php','','left=100,top=10,width=700,height=900');
FPrint.addEventListener("load", function() {
FPrint.print();
FPrint.close();
});
这假设.print()
方法是同步的,并且在打印完成之前不会返回(我不确定)。如果事实证明它是异步的,那么你可能必须听取onafterprint事件以了解它何时完成打印并且当时只关闭窗口。
经过一些测试后,打印后关闭窗口会很麻烦,因为IE的行为与Firefox和Chrome不同。在Firefox和Chrome中,.print()
方法块和下一行代码在打印完成后才会执行。在IE中,.print()
是异步的,不会阻塞,因此下一行代码会立即执行。这显然不会使用您的FPrint.close()
代码行,因为您将在打印之前关闭窗口。似乎只在IE中,你需要监听onafterprint事件并在事件触发时关闭窗口。
答案 1 :(得分:0)
我认为您在代码中不需要FPrint.document.close()
。
在进入.focus()
和.print()
之前,您的javascript不会等待窗口的DOM /文档完全加载 - 因此您可能希望添加promises。如果您完全使用jQuery,则可以使用它when
。