在Javascript中从新窗口打印

时间:2014-10-24 16:09:19

标签: javascript

我正在尝试打开一个新窗口,其中包含来自文件的html代码,然后打印文档

以下代码有效,即布局显示在新窗口内,但打印文档始终为空白

var FPrint = window.open('layout.php','','left=100,top=10,width=700,height=900');
FPrint.document.close();
FPrint.focus();
FPrint.print();
FPrint.close();

我做错了什么?

是否有人能够提供建议的修复

由于

2 个答案:

答案 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

http://api.jquery.com/jquery.when/