检测用户是否通过javascript打印内容

时间:2017-07-05 06:10:26

标签: javascript printing

我在javascript中检测到打印事件时遇到了问题。 例如,用户想要打印文档并在网页中按下打印,然后另一个窗口出现,例如,从Adobe Reader打印,然后出现另一个Adobe Reader窗口,您可以在其中设置属性,选择要打印的页面以及不打印的页面......此窗口中有打印按钮。我可以实际检测用户何时使用javascript在浏览器中按下此Adobe Reader窗口中的此打印按钮?

我已经尝试过使用onafterprint,但也许我没有正确地做到这一点或者我不知道。

在我的主js文件中就是这样的。

window.onbeforeprint = function() {
    console.log('This will be called before the user prints.');
};
window.onafterprint = function() {
    console.log('This will be called after the user prints');   
};

我从这里开始:https://www.tjvantoll.com/2012/06/15/detecting-print-requests-with-javascript/

2 个答案:

答案 0 :(得分:0)

您是否意识到您的代码什么都不做? 这个会帮助你。

(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;
}());

在任何打开的页面上的dev控制台中运行它,然后点击ctrl-P,你应该看到消息。

答案 1 :(得分:0)

您是否尝试在同一链接中使用matchMedia

(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;
}());

没有完成浏览器兼容性检查的全部功能,但该代码在Safari 10.1.1中为我工作并打印两个语句,而onafterprint内容不起作用(尽管我在打印时输出为pdf对话框,因为我没有打印机。)

我假设Adobe Reader你只是指正常的打印弹出窗口,你选择打印机和副本数/ /页面/等,因为据我所知Adobe Reader是一个桌面软件