我有一个带有简单“打印”图像/链接的页面,该页面执行简单的 javascript onclick
处理程序。我发现当我检查打印对话框的时间太长时,Chrome 会提示页面出现“页面无响应”警告。我在其他浏览器中没有看到这种行为。
HTML 看起来像这样:
<a onclick="if(window.print) window.print(); return false;">
<img src="print-button.png" alt="[Print]" />
</a>
页面上没有其他事件脚本,所以我猜测这个 onclick
处理程序是问题所在。我的猜测是 Chrome 在幕后做了类似的事情:
- 接受操作系统的点击事件
- 查看
onclick
处理程序存在 - 开始计时
- 调用
onclick
处理程序 onclick
处理程序调用window.print()
(阻塞,等待用户输入)- [时间流逝]
- 秒表显示时间过长
- Chrome 向用户发出警告
如果属实,我会认为这是 Chrome 中的一个错误,因为 window.print
调用不应该是“定时的”。也就是说,这是一个阻止用户交互的操作,用户可以根据需要花费尽可能多的时间。
我试过这样作弊:
<a onclick="if(window.print) setTimeout(function() { window.print(); }, 0); return false;">
<img src="print-button.png" alt="[Print]" />
</a>
...但它并没有改变任何东西——Chrome 仍然提示长时间运行的脚本。
我是否使用了错误的技术来触发打印对话框?或者这是 Chrome 中的错误?
我在 64 位 Mac 上运行 v72.0.3626.119,但我无法重现,而我有一个在 64 位 Windows 上运行相同版本的客户端,她报告了这个问题。
最佳答案
这似乎是自 2018 年 2 月 27 日/Chrome 64 以来 Chrome 中的一个已知错误
有一个针对 Chrome 73 的修复
https://bugs.chromium.org/p/chromium/issues/detail?id=816869
关于javascript - 如何在没有收到 "Page Unresponsive"警告的情况下从 javascript 显示打印对话框?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54895092/