TJ *_*oll 108
您现在可以使用以下技术在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;
}());
Run Code Online (Sandbox Code Playgroud)
我在http://tjvantoll.com/2012/06/15/detecting-print-requests-with-javascript/上详细介绍了这项工作以及可以使用的内容.
对于Internet Exploder,有事件window.onbeforeprint,window.onafterprint但它们不能与任何其他浏览器一起使用,因此它们通常是无用的.
它们似乎由于某种原因完全相同,都在打印窗口打开之前执行它们的事件处理程序.
但是,如果你想要它,尽管有这些警告,这是一个例子:
window.onbeforeprint = function() {
alert("Printing shall commence!");
}
Run Code Online (Sandbox Code Playgroud)
对于 2020 年阅读本文的任何人。该addListener函数大部分已被弃用,取而代之的是addEventListenerSafari 除外:
if (window.matchMedia) {
const media = window.matchMedia("print");
const myFunc = mediaQueryList => {
if (mediaQueryList.matches) {
doStuff();
}
};
try {
media.addEventListener("change", myFunc);
} catch (error) {
try {
media.addListener(myFunc);
} catch (error) {
console.debug('Error', error)
}
}
}
Run Code Online (Sandbox Code Playgroud)
参考:另一个SO问题