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

Sri*_*aul 13 html javascript printing window

我有一个场景,在我的网页上我做了一个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);
Run Code Online (Sandbox Code Playgroud)

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

<html><body onload="window.print();"> ... Content goes here ...</body></html>
Run Code Online (Sandbox Code Playgroud)

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

red*_*rum 16

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

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

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

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

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

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

当多个文档可以在不同时间出现在单个窗口中时使用工作表.例如,选项卡式浏览器可以在不同时间在单个窗口中显示不同的文档.在这种情况下,工作表是合适的,即使它仅适用于窗口中当前可见的文档.由于用户必须在同一窗口中查看其他文档之前必须先关闭当前文档,因此应首先关闭该工作表.

https://developer.apple.com/library/mac/documentation/UserExperience/Conceptual/OSXHIGuidelines/WindowDialogs.html