簡體   English   中英

打印預覽在 Chrome 中凍結 Javascript

[英]Print preview freezes Javascript in Chrome

如果打印預覽打開超過幾秒鍾,我一直在為 Chrome 放棄 Websocket 連接而苦苦掙扎。 我已經將其追溯到這張票,原因是window.print()是同步的,因此會停止任何其他腳本的執行,從而使 websocket 超時並下降。

由於這張票是在 2.5 年前打開的,而且目前是 WontFix,我正在尋找一種解決方法。

我試過的

使用 window.open

最初,我使用 Iframe 來呈現內容並打印出來。 然后我嘗試移動它以打開一個新選項卡,在那里加載內容並打印它。

window.open("iframe.html");

你可以在這里找到一個最小的例子(代碼在這里)。 如果您打開控制台,您會看到它每秒都在計數。 2 秒后,將打開一個彈出窗口(您可能需要啟用彈出窗口),在新選項卡中加載打印。 等待幾秒鍾,然后關閉打印預覽。 如果您切換回原始選項卡,您可以看到計數器已停止。

使用錨點

然后我嘗試使用錨標記, target="_blank" ,如下所示:

<a href="iframe.html" target="_blank">print</a>

(示例在這里,代碼在這里

這會打開一個新選項卡,但計數器仍然停止。 如果我右鍵單擊該鏈接並使用Open link in new tab ,則計數器可以工作。


是否有其他方法可以打開使用不同執行上下文的窗口? 或者對不同的解決方法有什么想法?

如果問題是新打開的窗口/選項卡的打印預覽阻塞了主選項卡,則找到解決方法:

<a href="xxxx" target="blank_" rel="noopener" />.

訣竅是noopener 如果你不需要從新打開的 javascript 訪問原始窗口,並且在新窗口上阻止 JS 不是問題,那么在 Chrome 中添加此屬性是有效的。

如果在 javascript 中打開一個窗口,您可以使用

window.open('your_url_here', 'Page Title Here', 'rel="noopener"');

暫無
暫無

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

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