如何从javascript显示打印对话框而不会收到"Page Unresponsive"警告?

Chr*_*ltz 5 html javascript google-chrome

我有一个页面,带有一个简单的"打印"图像/链接,执行一个简单的JavaScript onclick处理程序.我发现,当我花太长时间检查打印对话框时,Chrome会抱怨页面上有"Page Unresponsive"警告.我没有在其他浏览器中看到此行为.

HTML看起来像这样:

<a onclick="if(window.print) window.print(); return false;">
  <img src="print-button.png" alt="[Print]" />
</a>
Run Code Online (Sandbox Code Playgroud)

页面上没有其他活动脚本,所以我猜这个onclick处理程序是问题所在.我的猜测是Chrome在幕后做了类似的事情:

  1. 从OS接受点击事件
  2. 看到onclick处理程序存在
  3. 启动秒表
  4. 调用onclick处理程序
  5. onclick处理程序调用window.print()(阻塞,等待用户输入)
  6. [时间流逝]
  7. 秒表表示已经过了太多时间
  8. Chrome会向用户发出警告

我认为这是Chrome中的一个错误,如果是真的,因为window.print调用不应该"定时".也就是说,它是一个阻止用户交互的动作,并允许用户花费他们需要的时间.

我这样做曾经试过作弊:

<a onclick="if(window.print) setTimeout(function() { window.print(); }, 0); return false;">
  <img src="print-button.png" alt="[Print]" />
</a>
Run Code Online (Sandbox Code Playgroud)

...但它没有改变任何东西 - Chrome仍然抱怨长期运行的脚本.

我使用错误的技术来触发打印对话框吗?或者这是Chrome中的错误?

我在64位Mac上运行v72.0.3626.119并且我无法重现这一点,而我在64位Windows中运行相同版本的客户端并且她正在报告此问题.

And*_*rew 2

这似乎是自 2018 年 2 月 27 日以来 Chrome 中的一个已知错误 / Chrome 64

Chrome 73 已修复

https://bugs.chromium.org/p/chromium/issues/detail?id=816869