【问题标题】:Print preview freezes Javascript in Chrome打印预览会冻结 Chrome 中的 Javascript
【发布时间】:2017-04-19 17:06:48
【问题描述】:

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

自从 2.5 年前开票以来,它目前是 WontFix,我正在寻找一种解决方法。

我尝试过的

使用window.open

最初,我使用 iframe 来呈现内容并打印它。然后我尝试移动它以打开一个新标签,在那里加载内容并打印它。

window.open("iframe.html");

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

使用锚

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

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

(例如here,代码here

这会打开一个新标签,但计数器仍会停止。如果我右键单击该链接并使用Open link in new tab,那么计数器就会起作用。


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

【问题讨论】:

  • 刚刚遇到了完全相同的问题!

标签: javascript google-chrome printing


【解决方案1】:

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

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

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

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

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

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-02
相关资源
最近更新 更多