18

当用户打印某个网页时,我想将一些信息发送回我的数据库。我可以在 IE 中做到这一点,onbeforeprint()onafterprint()我想以与浏览器无关的方式来做同样的事情。不在乎我必须使用哪种技术组合(PHP、MySQL、JavaScript、HTML),只要它完成即可。有任何想法吗?

编辑:

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

编辑:

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

4

4 回答 4

33

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

以下可能会导致多次调用beforePrint()and 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/

于 2013-03-27T15:27:57.293 回答
5

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

于 2010-07-26T23:52:56.923 回答
3

试着window.print()用你自己的掩饰原生...

// hide our vars from the global scope
(function(){

  // make a copy of the native window.print
  var _print = this.print;

  // create a new window.print
  this.print = function () {
    // if `onbeforeprint` exists, call it.
    if (this.onbeforeprint) onbeforeprint(this); 
    // call the original `window.print`.
    _print(); 
    // if `onafterprint` exists, call it.
    if (this.onafterprint) onafterprint(this);
  }

}())

更新:评论。

于 2010-07-26T23:55:51.220 回答
-1

我认为这根本不可能正确地做到这一点。或者至少 - 不是我知道的任何技术,也不是之前给出的任何答案。

使用 onafterprint 和使用服务器端动态图像生成脚本都会告诉您,即使访问者只是进入打印预览模式然后取消,页面也已打印。

但是,我想了解如何获取正确的信息,以便我可以确定该页面实际上是打印的。

于 2012-08-22T21:22:51.230 回答