में दो अलग-अलग तरीकों से होता है, मैं वर्तमान में क्रोम (43.0.2357.130) का सबसे अद्यतित संस्करण उपयोग कर रहा हूं, और window.print()
से प्रिंट को कॉल करते समय प्रिंटिंग कार्यक्षमता में अंतर का अनुभव कर रहा हूं ⌘P ।ब्राउज़र प्रिंट ईवेंट का पता लगाना क्रोम
window.print()
का उपयोग करते समय प्रिंटिंग यह कंसोल पर सही ढंग से आउटपुट करता है। जब संवाद बंद हो जाता है तो यह Before Print
आउटपुट करता है, और After Print
संवाद बंद होने पर।
हालांकि, क्रोम मेनू का उपयोग करते समय, या मुद्रित करने के लिए ⌘P प्रिंट करते समय, यह Before Print
, और After Print
दोनों को कंसोल पर लॉग करता है जब प्रिंट संवाद खुलता है।
यहां वह कोड है जिसका मैं उपयोग कर रहा हूं, जो अन्य ब्राउज़रों में अच्छी तरह से काम करता है।
function beforePrint() {
console.log('Before Print');
}
function afterPrint() {
console.log('After Print');
}
if (window.matchMedia) {
var mediaQueryList = window.matchMedia('print');
mediaQueryList.addListener(function (mql) {
(mql.matches) ? beforePrint() : afterPrint();
});
}
else {
// basically a fallback for < IE11
window.addEventListener('beforeprint', beforePrint, false);
window.addEventListener('afterprint', afterPrint, false);
}
एक बार फिर स्पष्टता के रूप में अगर इस कंसोल था के लिए:
> window.print()
Before Print
// Print Dialog is now open, I press cancel to close dialog
After Print
यह आउटपुट मैं जब मैं का उपयोग ⌘P या मेनू है:
यह आउटपुट मैं उम्मीद है प्रिंट शुरू करने के लिए:
Before Print
After Print
// Print Dialog is now open, but it is occurring in the wrong place
क्या यह क्रोम में एक बग है, या घटना को सही तरीके से कैप्चर करने का कोई और तरीका है?
बस संदर्भ के लिए, यहाँ के लिए matchMedia