打印预览冻结Chrome中的Javascript

时间:2016-12-05 10:25:27

标签: javascript google-chrome printing

如果打印预览打开超过几秒钟,我一直在努力让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,则计数器可以正常工作。

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

1 个答案:

答案 0 :(得分:3)

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

set.seed(2)

Obs <- 1:20
i <- sample(1:2, 20, replace = TRUE)
j <- sample(1:5, 20, replace = TRUE)
k <- sample(1:4, 20, replace = TRUE)
ijk <- paste(i,j,k, sep="-")
B <- data.frame(Obs,i,j,k,ijk); B

#    Obs i j k   ijk
# 1    1 1 4 4 1-4-4
# 2    2 2 2 2 2-2-2
# 3    3 2 5 1 2-5-1
# 4    4 1 1 1 1-1-1
# 5    5 2 2 4 2-2-4
# 6    6 2 3 4 2-3-4
# 7    7 1 1 4 1-1-4
# 8    8 2 2 2 2-2-2
# 9    9 1 5 3 1-5-3
# 10  10 2 1 4 2-1-4
# 11  11 2 1 1 2-1-1
# 12  12 1 1 1 1-1-1
# 13  13 2 5 3 2-5-3
# 14  14 1 5 4 1-5-4
# 15  15 1 3 2 1-3-2
# 16  16 2 4 4 2-4-4
# 17  17 2 5 4 2-5-4
# 18  18 1 2 4 1-2-4
# 19  19 1 4 3 1-4-3
# 20  20 1 1 3 1-1-3

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