Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 查看打印何时完成Jquery_Javascript_Jquery_Html - Fatal编程技术网

Javascript 查看打印何时完成Jquery

Javascript 查看打印何时完成Jquery,javascript,jquery,html,Javascript,Jquery,Html,是否有一种方法可以确定使用JQuery打印何时结束。我不想知道打印窗口何时关闭,而是想知道实际打印何时完成。我的问题是,当用户在我的web应用程序上打印一个页面并快速从该页面导航时,打印会被切断,并且不会给出整个打印结果。(我在想,如果我可以在实际打印结束之前阻止UI,这将解决问题)。不,没有。jQueryAPI链接没有列出任何打印机方法。很抱歉,您尝试通过jQuery访问Mac和Windows打印机队列时运气不佳。队列是操作系统的一部分&而不是web浏览器(OS应用程序)。因此,除非你正在使用

是否有一种方法可以确定使用JQuery打印何时结束。我不想知道打印窗口何时关闭,而是想知道实际打印何时完成。我的问题是,当用户在我的web应用程序上打印一个页面并快速从该页面导航时,打印会被切断,并且不会给出整个打印结果。(我在想,如果我可以在实际打印结束之前阻止UI,这将解决问题)。

不,没有。jQueryAPI链接没有列出任何打印机方法。很抱歉,您尝试通过jQuery访问Mac和Windows打印机队列时运气不佳。队列是操作系统的一部分&而不是web浏览器(OS应用程序)。因此,除非你正在使用C或C++或java,否则没有办法将事件桥从打印机队列构建到多个浏览器。 不仅如此,微软和苹果还必须支持多家第三方公司,比如谷歌。当他们分别拥有自己的web浏览器(如IE和Safari)时,他们不太可能这样做。免费网络浏览器的工作方式是,他们试图将默认流量路由到搜索引擎中,这样他们就可以提供广告&从广告收入中获利。微软希望通过从Bing(默认IE搜索引擎)上传广告,而不是谷歌的口袋,把钱存入他们的银行账户


因此,我们不太可能在短期内看到跨浏览器jQuery解决方案的OSAPI打印。他们不会仅仅因为它使web开发人员的生活更轻松而使用该功能。如果他们能找到一种从中赚取数百万美元的方法,他们只想让这项功能可用。

你可以使用
window.onafterprint
(由IE 5+和FireFox 6+支持)和
window.matchMedia
(由Chrome 9+和Safari 5.1+支持)。不幸的是,Opera也不支持。下面是一个详细介绍该方法的示例

以下是代码,以防链接被停用:

(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;
}());
$(文档).ready(函数(){
var延迟=“”;
$('#PrintInput')。在('keyup',函数(){
清除超时(延迟);
延迟=设置超时(函数(){
//5秒后停止打印时执行某些操作。
},5000);
});

});您确定导航离开是问题的原因吗?我本以为,当用户完成打印对话框,控件返回浏览器时,打印作业已经进入打印机滑阀?实际上,这有点像标签打印机。只有当您快速离开打印机时,才会发生此问题。我没有遇到过这个问题,除非我从页面快速导航。在我看到这个问题之前,我确信它是这样工作的。检查打印机的配置。。。它是如何管理打印堆栈的,是在开始打印之前传输所有数据还是在打印过程中传输数据?这只是一个可能会影响的想法……注意
窗口。onafterprint
事件:或者,更确切地说,不要这样做。事实证明,这方面的浏览器支持很差(仅限FF和IE)。我链接到的问题的一些答案包含了针对其他浏览器的非常粗糙的解决方法,但我不会指望它们……我知道没有一种使用Jquery访问打印队列的方法。只是想知道这个问题是否有解决办法。因为用户希望单击打印并快速从web应用导航,这样做只会截断打印。如果他们单击打印链接,则可以使用
打开一个新选项卡。但是,如果他们使用文件>打印功能,它将不起作用。如果他们使用该链接,则网页将在后台选项卡中打印。他们总是单击该链接。所以我打开了一个新的页面进行打印。嗯,听起来很有希望。我认为datatables Jquery插件也是这样做的。也许可以。让我测试一下。谢谢OP不是请求访问OS打印队列,而是一种检测浏览器何时发送所有打印信息的方法。正如@Anthony所说,似乎大多数浏览器都会为此触发不同的事件。@sinuhepop我不同意。OP没有提到在打印第一页之前,浏览器将所有信息发送到打印队列时触发事件的任何内容。它请求在从打印队列打印所有页面后触发的事件。这些是OP中的关键短语:“但是当实际打印完成”和“阻止UI直到实际打印结束”。我将对此进行测试。我现在只关心chrome和fire fox。