[英]Print preview freezes Javascript in Chrome
如果打印预览打开超过几秒钟,我一直在为 Chrome 放弃 Websocket 连接而苦苦挣扎。 我已经将其追溯到这张票,原因是window.print()
是同步的,因此会停止任何其他脚本的执行,从而使 websocket 超时并下降。
由于这张票是在 2.5 年前打开的,而且目前是 WontFix,我正在寻找一种解决方法。
最初,我使用 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.