Chrome:window.print()打印对话框仅在页面重新加载后打开(javascript)

时间:2013-09-04 19:52:30

标签: javascript google-chrome printing

我面临一个非常奇怪的问题。我从一个javascript文件调用window.print()。这在Safari,IE,Firefox中运行良好......直到两个小时前它也在Chrome中运行。 (版本29.0.1547.57)

我没有在我的javascript文件中更改任何必要的内容(实际上 - 我刚刚删除了一些注释...),但现在发生的事情真的很奇怪:在Chrome中,当window.print()是打开时,打印对话框不会打开调用。什么都没发生。但是,当我按下重新加载时,打印对话框立即打开。

其他浏览器中的行为没有改变。在Chrome中进行调试时,我可以看到window.print()按预期调用,然后脚本继续运行。在按下重新加载之前,不会显示打印对话框。

有没有人经历过这样的事情?我也尝试在setTimeout()中调用window.print(),但这并没有改变任何东西。当我调试要打印的页面内容时,看起来是完美加载的。

我很遗憾地问,但我在研究时没有找到任何东西。任何帮助将不胜感激!

谢谢!

6 个答案:

答案 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功能引起的。

see SO answer here

答案 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

希望这会有所帮助:)