我面临一个非常奇怪的问题。我从一个javascript文件调用window.print()。这在Safari,IE,Firefox中运行良好......直到两个小时前它也在Chrome中运行。 (版本29.0.1547.57)
我没有在我的javascript文件中更改任何必要的内容(实际上 - 我刚刚删除了一些注释...),但现在发生的事情真的很奇怪:在Chrome中,当window.print()是打开时,打印对话框不会打开调用。什么都没发生。但是,当我按下重新加载时,打印对话框立即打开。
其他浏览器中的行为没有改变。在Chrome中进行调试时,我可以看到window.print()按预期调用,然后脚本继续运行。在按下重新加载之前,不会显示打印对话框。
有没有人经历过这样的事情?我也尝试在setTimeout()中调用window.print(),但这并没有改变任何东西。当我调试要打印的页面内容时,看起来是完美加载的。
我很遗憾地问,但我在研究时没有找到任何东西。任何帮助将不胜感激!
谢谢!
答案 0 :(得分:14)
Wasiim是对的,有一个Chrome错误,当{DOM}中有window.print()
标记时,<video>
无效。我通过调用这个函数来解决它:
function printPage() {
window.print();
//workaround for Chrome bug - https://code.google.com/p/chromium/issues/detail?id=141633
if (window.stop) {
location.reload(); //triggering unload (e.g. reloading the page) makes the print dialog appear
window.stop(); //immediately stop reloading
}
return false;
}
答案 1 :(得分:7)
根据我的经验,这是由于持续的后台流量,例如ajax调用等阻止Chrome感觉该页面已完全加载。重新加载会中断所有流量,从而弹出打印对话框。 这是Visual Studio 2013中的一个特殊问题,其中BrowserLink在后台不断剔除。 这可以通过以下设置禁用BrowserLink进行测试:
<configuration>
<appSettings>
<add key="vs:EnableBrowserLink" value="false"/>
</appSettings>
</configuration>
答案 2 :(得分:2)
我与Chrome完全相同。您需要手动重新加载页面:
<a href="javascript:window.print();window.location.reload()">Print</a>
答案 3 :(得分:2)
如果有人使用带有Chrome的VS2013,这个问题是由BrowserLink功能引起的。
答案 4 :(得分:1)
Safari中的类似行为。它是由在背景上打开的HTTP请求引起的。
当任何HTTP请求正在进行时,window.print()
成功执行,但没有打开对话框!
您将遇到此问题, 时使用长轮询(用于服务器推送)。由于客户端已经很长时间打开了HTTP连接,window.print()
将无法正常工作。
答案 5 :(得分:0)
我很确定您遇到此问题,因为您的网页上有一个视频元素 - 很可能是MP4。
如果您禁用此视频/或改为使用OGV视频,则打印应该可以正常工作。 由于Chrome视频实施的限制,这是Chrome本身的一个错误。同样重要的是要注意,如果用户使用ctrl-p / cmd-p手动打印,则打印功能正确
http://code.google.com/p/chromium/issues/detail?id=141633
希望这会有所帮助:)