繁体   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