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

Php 对于非IE浏览器,onbeforeprint()和onafterprint()等效,php,javascript,mysql,html,onbeforeprint,Php,Javascript,Mysql,Html,Onbeforeprint,当用户打印某个网页时,我想将一些信息发送回我的数据库。我可以在IE中使用onbeforeprint()和onafterprint()来实现这一点,但我想用浏览器不可知的方式来完成同样的事情。只要完成了,我就不在乎使用哪种技术组合(PHP、MySQL、JavaScript、HTML)。有什么想法吗 编辑: 还有一些问题。我试着把我的函数作为一个图像放到我的Print.css中,但是我把它搞砸了。然后我试着添加一个事件监听器,但我也不能让它正常工作。如果有人能提供更多关于在任何浏览器中打印之前如何调

当用户打印某个网页时,我想将一些信息发送回我的数据库。我可以在IE中使用
onbeforeprint()
onafterprint()
来实现这一点,但我想用浏览器不可知的方式来完成同样的事情。只要完成了,我就不在乎使用哪种技术组合(PHP、MySQL、JavaScript、HTML)。有什么想法吗

编辑:

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

编辑:


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

我不是。当然,您可以在打印样式表中的某个位置指定一个图像,这可能只会在打印时调用,对于
onbeforeprint

请尝试用您自己的设置屏蔽本机
窗口。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);
  }

}())

更新:评论。

我认为这是不可能的。或者至少,我不知道用什么技术,也不知道以前给出的任何答案

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

但是,我想学习如何获得正确的信息,这样我就可以确保该页面已实际打印。

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

以下操作可能会导致多次调用beforePrint()和beforePrint()(例如,)。这可能是可取的,也可能不是可取的,这取决于您为响应打印而执行的特定处理


更多:

你是在建议这样的事情吗?我不知道这样行不行。我建议调用服务器端脚本作为图像源,它确实会返回图像,并且只做您喜欢的事情(记录打印操作,可能在页面上设置其他js可以检索/轮询的会话变量等)。Firefox从版本6开始就支持打印,请参阅Thank@no,但是我很难理解你的代码。你说这会屏蔽任何浏览器中的本机打印功能?这也给我提出了另一个问题,我是否可以制作一个JavaScript函数,检查每个窗口事件,然后在打印前执行我想要执行的函数,当
window.print==true
?@typoknig:它会;因此,您可能需要为打印前的
和打印后的
选择不同的名称。我假设您希望捕获对
窗口的调用。打印除您自己的脚本之外的其他脚本中的
。关于你问题的第二部分,我认为它会起作用,但听起来有点过头了…@typoknig:我在回答中添加了代码注释,应该有助于解释发生了什么。在我的页面上,我没有为用户提供打印按钮,所以我真正需要了解的是用户在非IE浏览器中进入
文件>打印时的情况。我会把它弄得一团糟,看看我是否能让你的代码正常工作,如果不能,我可能会“过度使用”:)这对你没有帮助。再看看Wrikken的答案;您可以将所需的数据放入查询字符串中,然后添加打印css规则,该规则通过服务器端脚本加载图像,该脚本存储查询字符串中的数据,然后再使用图像进行响应。值得注意的是,Chrome似乎会触发打印事件两次……实际上是四次——一次使用media.matches=true,然后使用media.matches=false,然后media.matches=true,然后media.matches=false。当我在Chrome中使用“使用系统对话框打印”时,这不起作用。窗口关闭,但打印失败。只是报告而已。:)不要在打印前使用更新HTML/class。仅适用于后打印(铬38)。看到这把小提琴了吗。可以使用FF(但仅使用onbeforeprint功能),不使用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);
}