打印预览冻结Chrome中的Javascript

sas*_*hee 7 javascript printing google-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,则计数器有效.


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

Bal*_*dos 6

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

<a href="xxxx" target="blank_" rel="noopener" />.
Run Code Online (Sandbox Code Playgroud)

诀窍是noopener。如果你不需要从新打开的 javascript 访问原始窗口,并且在新窗口上阻止 JS 不是问题,那么在 Chrome 中添加此属性是有效的。

如果在 javascript 中打开一个窗口,您可以使用

window.open('your_url_here', 'Page Title Here', 'rel="noopener"');
Run Code Online (Sandbox Code Playgroud)