问题 当window.open触发print onLoad时,父窗口会冻结


我有一个场景,在我的网页上我做了一个window.open(),它打开了另一个窗口 onLoad() 所调用 window.print()。在这个流程中,父母 window 仍然被冻结,不允许点击任何链接。如何摆脱这个问题?

例如:

HTML页面有三个链接:创建,管理和打印。打印链接的javascript代码如下:

    var url = '/actions/print/';
    var win = window.open(url,"Title_","resizable=yes,scrollbars=yes,directories=no,titlebar=no,location=no,status=no,menubar=no,width="+width+",height="+height);

现在,HTML呈现 /actions/print 是:

<html><body onload="window.print();"> ... Content goes here ...</body></html>

如您所见,单击打印将打开一个新窗口并立即触发打印。在这种状态下,当我回到具有三个链接的父窗口并尝试单击其他链接时,它不起作用并且显示为冻结。


8874
2017-11-23 20:08


起源

@drew谢谢。 - Sripaul
你可以尝试使用超时? window.setTimeout(function(){window.print();},0); 告诉我它是否有效:) - www139
@Sripaul那么,我的回答是否以任何方式帮助你? - redrum


答案:


您无法在OS X上解决此问题。我非常确定您只测试过。

以下是我在不同浏览器和平台上测试后得出的结论。

  • OS X上的Chrome,Safari和Firefox在a时不允许与父窗口进行交互 印刷模式 从子窗口打开(关闭打印对话框,但不弹出,重新启用交互)。

  • Win XP,IE11,Chrome和Firefox(全部在Win7上)上的IE8始终允许与此相同的场景进行交互。

这让我相信这是OS X的限制或建议。在进一步的研究中,这是我在developer.apple.com上发现的,证实了我的怀疑:

文档模式对话框可防止用户在特定文档中执行任何其他操作。用户可以切换到应用程序中的其他文档和其他应用程序。 文档模式对话框应该是工作表,使用文档 - 模式对话框(表格)中描述。


15
2017-11-26 22:59