当window.open触发“加载时打印”时,父窗口冻结



我有一个场景,在我的网页中,我做了一个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);

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

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

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

您无法在OS X上解决此问题。我敢肯定您只在.上测试过

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

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

  • WinXP上的IE8、IE11、Chrome和Firefox(都在Win7上)总是允许与同一场景进行交互。

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

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

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

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

最新更新