簡體   English   中英

如何從javascript顯示打印對話框而不會收到“Page Unresponsive”警告?

[英]How to show print dialog from javascript without getting “Page Unresponsive” warnings?

我有一個頁面,帶有一個簡單的“打印”圖像/鏈接,執行一個簡單的javascript onclick處理程序。 我發現當我花費太長時間檢查打印對話框時,Chrome會抱怨頁面上出現“頁面無響應”警告。 我沒有在其他瀏覽器中看到此行為。

HTML看起來像這樣:

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

頁面上沒有其他活動腳本,所以我猜這個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>

...但它沒有改變任何東西 - 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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM