如果打印预览打开超过几秒钟,我一直在努力让Chrome放弃Websocket连接。我已将其追溯到this ticket,原因是window.print()
是同步的,因此暂停任何其他脚本执行,这反过来使websocket超时并丢弃。
由于故障单是在2。5年前开通的,而且目前是WontFix,我正在寻找解决方法。
最初,我使用Iframe渲染内容并打印出来。然后我尝试移动它以打开一个新标签,在那里加载内容并打印出来。
window.open("iframe.html");
您可以找到最小示例here(代码here)。如果你打开控制台,你会看到它每秒都在计算。 2秒后,将打开一个弹出窗口(您可能需要启用弹出窗口),以在新选项卡中加载打印件。等待几秒钟,然后关闭打印预览。如果切换回原始选项卡,则可以看到计数器已停止。
然后我尝试使用target="_blank"
的锚标记,如下所示:
<a href="iframe.html" target="_blank">print</a>
这会打开一个新标签,但计数器仍会停止。如果我右键单击该链接并使用Open link in new tab
,则计数器可以正常工作。
是否有其他方法可以打开使用不同执行上下文的窗口?或者任何不同解决方法的想法?
答案 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中添加此属性是有效的。