我在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/
答案 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是一个桌面软件