Pdf 检测浏览器打印事件

Pdf 检测浏览器打印事件,pdf,browser,printing,Pdf,Browser,Printing,是否可以检测用户何时从浏览器打印内容 更复杂的是,如果我们在新窗口中向用户呈现PDF文档,是否可以检测该文档的打印(假设用户从浏览器窗口打印) 我能找到的最接近的方法是,我们是否实现了自定义打印功能(类似于)并跟踪何时调用该功能 我主要感兴趣的是一个适用于internet explorer(6或更高版本)的解决方案。对于internet explorer,有事件窗口。在打印前有窗口和窗口。在打印后有窗口,但它们不适用于任何其他浏览器,因此通常是无用的 出于某种原因,它们的工作方式似乎完全相同,都

是否可以检测用户何时从浏览器打印内容

更复杂的是,如果我们在新窗口中向用户呈现PDF文档,是否可以检测该文档的打印(假设用户从浏览器窗口打印)

我能找到的最接近的方法是,我们是否实现了自定义打印功能(类似于)并跟踪何时调用该功能


我主要感兴趣的是一个适用于internet explorer(6或更高版本)的解决方案。对于internet explorer,有事件
窗口。在打印前有
窗口和
窗口。在打印后有
窗口,但它们不适用于任何其他浏览器,因此通常是无用的

出于某种原因,它们的工作方式似乎完全相同,都是在打印窗口打开之前执行它们的事件处理程序

但如果你想要它,尽管有这些警告,这里有一个例子:

window.onbeforeprint = function() {
    alert("Printing shall commence!");
}

现在,您可以使用以下技术在IE 5+、Firefox 6+、Chrome 9+和Safari 5+中检测打印请求:

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

    if (window.matchMedia) {
        var mediaQueryList = window.matchMedia('print');
        mediaQueryList.addListener(function(mql) {
            if (mql.matches) {
                beforePrint();
            } else {
                afterPrint();
            }
        });
    }

    window.onbeforeprint = beforePrint;
    window.onafterprint = afterPrint;
}());

我将更详细地介绍它的作用以及它在中的用途。

如果它仅用于跟踪目的,也许您可以将CSS打印媒体中的背景url设置为服务器页面(.aspx、.php等),然后在服务器上执行一些操作


这并不像TJ的解决方案那样具有多样性,但在只需要跟踪的情况下,它的问题可能会少一些。

对于在2020年阅读这篇文章的人来说。 除了Safari之外,
addListener
函数大部分都被弃用,取而代之的是
addEventListener

if(window.matchMedia){
const media=window.matchMedia(“打印”);
常量myFunc=mediaQueryList=>{
if(mediaQueryList.matches){
doStuff();
}
};
试一试{
media.addEventListener(“更改”,myFunc);
}捕获(错误){
试一试{
media.addListener(myFunc);
}捕获(错误){
console.debug('Error',Error)
}
}
}

参考资料:

你太棒了。我已经搜索了几天的Chrome/Safari支持。我应该知道不要离开SO的温暖拥抱。+1,很好,我计划很快抄袭这个答案。这似乎不再适用于Windows上的Chrome 38<编码>打印前
从不触发。(右键单击结果iframe并选择“打印…”),一旦打印预览完成渲染,afterPrint现在会在Chrome中启动抱歉,这是我的问题(),如果我想检测“打印”的实际按下,该怎么办按钮,而不仅仅是用户发出的任何打印请求?我认为我的方法存在一些问题,例如打印预览等,但对于不太重要的日志记录,它对我来说还可以。不知道Internet Exploder是否是一个打字错误,但它非常棒