2015-06-23 11 views
6

में दो अलग-अलग तरीकों से होता है, मैं वर्तमान में क्रोम (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

उत्तर

संबंधित मुद्दे