javascript - 如何在没有收到 "Page Unresponsive"警告的情况下从 javascript 显示打印对话框?

标签 javascript html google-chrome

我有一个带有简单“打印”图像/链接的页面,该页面执行简单的 javascript onclick 处理程序。我发现当我检查打印对话框的时间太长时,Chrome 会提示页面出现“页面无响应”警告。我在其他浏览器中没有看到这种行为。

HTML 看起来像这样:

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

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

  1. 接受操作系统的点击事件
  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>

...但它并没有改变任何东西——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/

相关文章:

javascript - 使用 HTML5 在上传前调整图片大小

java - 注销Struts 2.0应用程序后的chrome后退按钮

javascript - 克隆 Javascript 对象及其类型

javascript - Firebase 集合方法不返回 CollectionReference 对象

javascript - 如何使用delay()清除事件调用集

javascript - 不同的拆分正则表达式导致 IE

PHP If 语句在过滤 SQL 表时不起作用

html - 基于 colgroup 的表格单元格的宽度不起作用

google-chrome - 凭证管理api存放webauthn相关数据在哪里

javascript - 保存弹出窗口的 preventDefault 在 chrome 中有效,但在 firefox 中无效