【问题标题】:Printing from javascript in chrome: how to know printing is done?从 chrome 中的 javascript 打印:如何知道打印完成?
【发布时间】:2011-11-22 13:38:44
【问题描述】:

在我的 chrome 浏览器版本 17.0.942.0 winvista 中,printdlg 不是通常的模式 system-printdlg,而是在网站内呈现。所以我想按照here 的描述打印画布内容。但是代码

window.print(); window.close();

不会工作,因为window.close 也会关闭 printdlg。所以在 chrome 中 window.close 必须由用户发起或以某种方式延迟。有没有办法知道window.print是否完成,从而自动关闭窗口?

【问题讨论】:

  • 我没有意识到你可以覆盖打印对话框,我以为这是操作系统生成的对话框?能否附上截图让我们看看?
  • Imo 无法覆盖打印 dlg,chrome 刚刚引入了一个新的标准,它在网站内呈现。屏幕截图应该显示它:click
  • 酷,感谢@Pl4n3 的澄清
  • 不幸的是,这不是我看过的东西,所以不确定它是否可能。但是,如果您遇到了死胡同,并且您只需要它在 chrome 中工作并且您可以控制部署环境(例如,您知道打印机是如何设置的等),Google 云打印可能会有一些有用的提示code.google.com/apis/cloudprint/docs/overview.html
  • Google 云打印看起来,好像它可能是一个有趣的选择,谢谢! *读取*

标签: javascript google-chrome printing


【解决方案1】:

在与您遇到的类似的错误报告中查看此评论: http://code.google.com/p/chromium/issues/detail?id=92107#c31

似乎window.print 是异步的,解决方法是在打印后检查鼠标移动事件,该事件会在关闭打印对话框时发生,然后您可以执行其余操作。

另见:Chrome window.print() window.close() results in 'print preview failed'. Solution?

【讨论】:

    【解决方案2】:

    将此脚本添加到您的弹出打印窗口

    <script src="/assets/print_window_close.js" type="text/javascript"></script>
    

    print_window_close.js 的内容是

    jQuery(document).ready(function() {
    
        setTimeout(function() {
            window.close();
        }, 1);
    
    });
    

    基本上 seTimeout 仅在文档​​获得焦点时调用,这仅在覆盖打印对话框关闭时发生。因此,这与您想要的方式完全相同。

    【讨论】:

    • 您真的希望 setTimeout 每毫秒运行一次吗?也许应该是500?此外,这会导致调用新窗口的原始窗口相对于 JS 挂起。页面上的所有 JS 功能不再起作用。我注意到这个问题有几种不同的方法,但无法找出核心问题。
    【解决方案3】:

    您可以尝试使用 window.onafterprint。 例如:

    window.onafterprint = function(){console.log('Print finished...')}
    

    那么您可以在这篇文章中找到更多详细信息:http://tjvantoll.com/2012/06/15/detecting-print-requests-with-javascript/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-06-21
      • 2010-10-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-23
      相关资源
      最近更新 更多