【问题标题】:Chrome: window.print() print dialogue opens only after page reload (javascript)Chrome:window.print() 打印对话框仅在页面重新加载后打开(javascript)
【发布时间】:2013-09-08 11:30:00
【问题描述】:

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

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

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

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

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

谢谢!

【问题讨论】:

标签: javascript google-chrome printing


【解决方案1】:

Wasiim 是对的,当 DOM 中有 <video> 标记时,有一个 Chrome 错误,window.print() 不起作用。我通过调用这个函数解决了它:

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;
}

【讨论】:

  • 智能移动停止。只是好奇,您是如何想到停止重新加载会起作用的?我自己,我可能想出了重新加载并将问题标记为已解决。
  • @Martin,简单地重新加载基本上可以解决问题,但是一旦打印对话框关闭,页面将重新加载。所以我想用window.stop阻止它重新加载。
【解决方案2】:

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

<configuration>
    <appSettings>
        <add key="vs:EnableBrowserLink" value="false"/>
    </appSettings>
</configuration>

【讨论】:

  • 这一直困扰着我,直到我最终找到了这个答案。就我而言,这也是比第一个答案更好的解决方案,因为这只发生在 VS2013 的调试模式下。我发布的网站,因此当不从 VS 运行时,没有问题。
【解决方案3】:

Chrome 也有同样的问题。您需要手动重新加载页面:

    <a href="javascript:window.print();window.location.reload()">Print</a> 

【讨论】:

    【解决方案4】:

    如果有人使用 VS2013 和 chrome,这个问题是由 BrowserLink 功能引起的。

    see SO answer here

    【讨论】:

      【解决方案5】:

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

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

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

      【讨论】:

      • 其他答案中提到的“重新加载”解决方法不是因为重新加载本身,而是因为在重新加载之前浏览器会停止正在进行的请求。可以通过单击浏览器上的“X”按钮来停止正在进行的请求,而不是重新加载来证明。
      【解决方案6】:

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

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

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

      希望这会有所帮助:)

      【讨论】:

        猜你喜欢
        • 2018-08-28
        • 2016-10-02
        • 1970-01-01
        • 2017-11-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-06-05
        • 1970-01-01
        相关资源
        最近更新 更多