22

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

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

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

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

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

谢谢!

4

6 回答 6

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;
}
于 2014-03-25T22:01:15.930 回答
7

根据我的经验,这是由于持续的后台流量,例如 ajax 调用等阻止 Chrome 感觉该页面已完全加载。重新加载会中断所有流量,因此会弹出打印对话框。这是 Visual Studio 2013 中的一个特殊问题,其中BrowserLink在后台不断滴答作响。这可以通过以下设置禁用 BrowserLink 来测试:

<configuration>
    <appSettings>
        <add key="vs:EnableBrowserLink" value="false"/>
    </appSettings>
</configuration>
于 2014-03-17T13:45:05.813 回答
2

如果有人在 chrome 上使用 VS2013,这个问题是由 BrowserLink funcionality 引起的。

在这里看到这样的答案

于 2014-04-15T04:13:58.757 回答
2

我对 Chrome 有完全相同的问题。您需要手动重新加载页面:

    <a href="javascript:window.print();window.location.reload()">Print</a> 
于 2013-10-29T12:49:49.680 回答
1

Safari 中的类似行为。它是后台打开的 HTTP 请求引起的。

当任何 HTTP 请求正在进行时,window.print()都会成功执行,但不会打开任何对话框!

您使用长轮询(用于服务器推送)时,您将遇到此问题。因为客户端已经打开了很长时间的 HTTP 连接,所以window.print()永远不会工作。

于 2017-09-05T09:06:50.940 回答
0

我很确定您遇到了这个问题,因为您的页面上有一个视频元素 - 很可能是 MP4。

如果您禁用此视频/或改为使用 OGV 视频,则打印应该可以正常工作。由于 Chrome 视频实现的限制,这是 chrome 本身的一个错误。还需要注意的是,如果用户使用 ctrl-p / cmd-p 手动打印,打印功能正确

http://code.google.com/p/chromium/issues/detail?id=141633

希望这可以帮助 :)

于 2013-09-09T07:48:42.803 回答