【问题标题】:Find out when printing finishes Jquery找出打印何时完成 Jquery
【发布时间】:2016-04-01 15:07:32
【问题描述】:

有没有办法使用 JQuery 找出打印结束的时间。我不想找到打印窗口何时关闭,但实际打印何时完成。我的问题是,当用户在我的网络应用程序上打印一个页面并从该页面快速导航时,打印被切断并且没有给出整个打印结果。(我在想是否可以阻止 UI 直到实际打印结束,它会解决问题)。

【问题讨论】:

  • 您确定导航是问题的原因吗?我原以为当用户完成打印对话框并将控制权返回给浏览器时,打印作业已经进入打印机假脱机?
  • 其实这有点像标签打印机。此问题仅在该打印机上发生,并且仅在您快速导航时发生。除非我从页面快速导航,否则我没有遇到过这个问题。在我看到这个问题之前,我确信这就是它的工作原理。
  • 检查打印机的配置...它是如何管理打印堆栈的,它是在开始打印之前传输所有数据还是在运行时传输?只是一个可能会影响的想法......
  • 关注window.onafterprint 事件:stackoverflow.com/questions/18325025/…
  • 或者,更确切地说,不要那样做。事实证明,浏览器支持不佳(仅限 FF 和 IE)。我链接的问题的一些答案包括其他浏览器的看起来非常h​​acky的解决方法,但我不会指望它们......

标签: javascript jquery html


【解决方案1】:

您可以结合使用window.onafterprint(IE 5+ 和 FireFox 6+ 支持)和window.matchMedia(Chrome 9+ 和 Safari 5.1+ 支持)。不幸的是,Opera 也不支持。这是一个article,详细介绍了该方法。

这是链接失效的代码:

(function() {
    var beforePrint = function() {
        console.log('Functionality to run before printing.');
    };
    var afterPrint = function() {
        console.log('Functionality to run after printing');
    };

    // supported by Chrome 9+ and Safari 5.1+
    if (window.matchMedia) {
        var mediaQueryList = window.matchMedia('print');
        mediaQueryList.addListener(function(mql) {
            if (mql.matches) {
                beforePrint();
            } else {
                afterPrint();
            }
        });
    }

    // supported by IE 5+ and FireFox 6+
    window.onbeforeprint = beforePrint;
    window.onafterprint = afterPrint;
}());

【讨论】:

  • 我将对此进行测试。我现在不关心除了 chrome 和 fire fox 之外的任何东西。
【解决方案2】:

不,没有。 jQuery http://api.jquery.com API 链接没有列出任何打印机方法。抱歉,但是您尝试通过 jQuery 访问 Mac 和 Windows 打印机队列时运气不佳。队列是操作系统的一部分,而不是 Web 浏览器(OS 应用程序)。因此,除非您使用 C、C++ 或 Java,否则无法构建从打印机队列返回到多个浏览器的事件桥。

不仅如此,Microsoft 和 Apple 还必须支持多家第三方公司,例如 Google。当他们有自己的网络浏览器时,他们不太可能这样做,例如。 IE 和 Safari,分别。免费网络浏览器的工作方式是他们尝试将默认流量路由到他们的搜索引擎,以便他们可以提供广告并从广告收入中获利。微软希望通过 Bing(默认 IE 搜索引擎)提供广告,将资金存入他们的银行账户,而不是进入 Google 的口袋。

因此,我们不太可能很快看到跨浏览器 jQuery 解决方案的操作系统 API 用于打印。他们不会仅仅因为它使 Web 开发人员的生活更轻松而制作该功能。他们只想提供该功能,前提是他们能找到一种方法从中赚取数百万美元。

【讨论】:

  • 我知道没有办法使用 Jquery 访问打印队列。只是想知道是否有解决该问题的方法。因为用户想要单击打印并快速从 Web 应用程序导航,这样做只会截断打印。
  • 如果他们点击打印链接,则可以使用<a href="..." target="_blank"> 打开一个新标签。但是,如果他们使用“文件”>“打印”功能,它将不起作用。如果他们使用该链接,则网页将在后台选项卡中打印。
  • 他们总是点击链接。所以我打开一个新的页面来打印。嗯,这听起来很有希望。我认为 datatables Jquery 插件也是这样做的。也许可以。让我测试一下。谢谢!
  • OP 不是要求访问操作系统打印队列,而是一种检测浏览器何时发送所有打印信息的方法。正如@Anthony 所说,似乎大多数浏览器为此触发了不同的事件。
  • @sinuhepop 我不同意。在打印第一页之前,当浏览器将所有信息 发送 到打印队列时,OP 没有提及任何有关触发事件的信息。它要求在从打印队列中打印完所有页面后触发一个事件。这些是 OP 中的关键短语:“但是当实际打印完成时”和“阻止 UI 直到实际打印结束”。
【解决方案3】:

$(document).ready(function () {
var delays='';
        $('#PrintInput').on('keyup', function () {
        clearTimeout(delays); 
        delays = setTimeout(function () {
          // do something when printing stop after 5 sec.
        },5000);
        });
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-05-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多