onbeforeprint() 和 onafterprint() 等效于非 IE 浏览器

2022-08-30 21:54:13

我想在用户打印某个网页时将一些信息发送回我的数据库。我可以在IE中执行此操作,但我想以浏览器不可知的方式做同样的事情。不要在乎我必须使用哪种技术组合(PHP,MySQL,JavaScript,HTML),只要它完成。有什么想法吗?onbeforeprint()onafterprint()

编辑:

仍然有一些问题。我尝试将我的函数作为图像放在我的函数中,但我以某种方式搞砸了它。然后我尝试只添加一个事件侦听器,但我也无法让它正常工作。如果有人可以提供更多关于我如何在任何浏览器中打印之前调用函数的详细信息,我将不胜感激。Print.css

编辑:

我现在放弃了这一点,我已经确定了另一种做我想做的事情的方式。我期待着FireFox支持onbeforeprint()和onafterprint()的那一天。


答案 1

许多浏览器现在都支持 window.matchMedia。此 API 允许您检测 CSS 媒体查询何时生效(例如,旋转屏幕或打印文档)。对于跨浏览器方法,请使用 /。window.matchMediawindow.onbeforeprintwindow.onafterprint

以下情况可能会导致多次调用 beforePrint()afterPrint()(例如,Chrome 会在每次重新生成打印预览时触发侦听器)。这可能是可取的,也可能是不可取的,具体取决于您为响应打印而进行的特定处理。

if ('matchMedia' in window) {
    // Chrome, Firefox, and IE 10 support mediaMatch listeners
    window.matchMedia('print').addListener(function(media) {
        if (media.matches) {
            beforePrint();
        } else {
            // Fires immediately, so wait for the first mouse movement
            $(document).one('mouseover', afterPrint);
        }
    });
} else {
    // IE and Firefox fire before/after events
    $(window).on('beforeprint', beforePrint);
    $(window).on('afterprint', afterPrint);
}

更多: http://tjvantoll.com/2012/06/15/detecting-print-requests-with-javascript/


答案 2

我不确定其他浏览器会允许你这样做。当然,您可以在打印样式表中的某个位置指定图像,这可能只会在打印时调用,因为onbeforeprint