打印预览冻结Chrome中的Javascript

问题描述 投票:6回答:1

如果打印预览打开超过几秒钟,我一直在努力让Chrome放弃Websocket连接。我已将其追溯到this ticket,原因是window.print()是同步的,因此停止任何其他脚本执行,这反过来使websocket超时并丢弃。

由于机票在2。5年前开放,目前是WontFix,我正在寻找解决方法。

我试过的

Use window.open

最初,我使用Iframe渲染内容并打印出来。然后我试图移动它以打开一个新标签,在那里加载内容并打印它。

window.open("iframe.html");

你可以找到一个最小的例子here(代码here)。如果你打开控制台,你会发现它每秒都在计算。 2秒后,将打开一个弹出窗口(您可能需要启用弹出窗口),以在新选项卡中加载打印件。等待几秒钟,然后关闭打印预览。如果切换回原始选项卡,则可以看到计数器已停止。

Use an anchor

然后我尝试使用target="_blank"的锚标签,如下所示:

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

(示例here,代码here

这将打开一个新选项卡,但计数器仍然停止。如果我右键单击链接并使用Open link in new tab,则计数器有效。


是否有其他方法可以打开使用不同执行上下文的窗口?或任何不同的解决方法的想法?

javascript google-chrome printing
1个回答
3
投票

如果问题是新打开的窗口/选项卡的打印预览阻止主选项卡,则找到解决方法:

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

诀窍是noopener。如果您不必从新打开的窗口的javascript访问原始窗口,并且在新窗口上阻止JS不是问题,则添加此属性可在Chrome中使用。

© www.soinside.com 2019 - 2024. All rights reserved.