2012-06-21 26 views
22

क्या उपयोगकर्ता किसी पृष्ठ को प्रिंट करते समय जावास्क्रिप्ट ईवेंट ट्रिगर करना संभव है? मैं किसी जावास्क्रिप्ट लाइब्रेरी पर निर्भरता को हटाना चाहता हूं, जब कोई उपयोगकर्ता पृष्ठ मुद्रित करने का विकल्प चुनता है, क्योंकि पुस्तकालय स्क्रीन के लिए बहुत अच्छा है लेकिन प्रिंट के लिए नहीं है।प्रिंट ईवेंट पर जावास्क्रिप्ट कैसे ट्रिगर करें?

कोई विचार यह कैसे प्राप्त करें?

+1

आप वास्तव में क्या हासिल करने की कोशिश कर रहे हैं?आपका मतलब क्या है "लाइब्रेरी स्क्रीन के लिए बहुत अच्छी है लेकिन प्रिंट के लिए नहीं है"? –

+1

प्रिंटिंग के साथ जावास्क्रिप्ट लाइब्रेरी को क्या करना है? वैसे भी प्रिंट करते समय ब्राउजर किसी भी पेज स्क्रिप्ट का आह्वान नहीं करता है। – Pointy

+0

विंडो का उपयोग करें। ऑनप्रिंट फ़ंक्शन, window.onafterprint, window.onbeforeprint –

उत्तर

24

window.onbeforeprint ठोकर किसी के लिए Google से इस उत्तर पर, मुझे चीजों को साफ़ करने का प्रयास करें:

जैसा कि अजय ने बताया, प्रिंटिंग के लिए दो घटनाएं निकाल दी गई हैं, लेकिन वे अच्छी तरह से समर्थित नहीं हैं; जहां तक ​​मैंने पढ़ा है, वे केवल इंटरनेट एक्सप्लोरर और फ़ायरफ़ॉक्स (6+) ब्राउज़र में समर्थित हैं। वे घटनाएं खिड़की हैं। ऑनबेरप्रिंट और खिड़की। तत्काल प्रिंट, जो (जैसा कि आप उम्मीद करेंगे) प्रिंट नौकरी के पहले और बाद में आग लग जाएगी।

हालांकि, जैसा कि जो के लिंक (https://stackoverflow.com/a/9920784/578667) में बताया गया है, यह बिल्कुल ठीक नहीं है कि यह सभी मामलों में कैसे लागू किया जाता है। ज्यादातर मामलों में, दोनों घटनाएं संवाद से पहले आग लगती हैं; दूसरों में, प्रिंट संवाद के दौरान स्क्रिप्ट निष्पादन रोक दिया जा सकता है, इसलिए दोनों घटनाएं एक ही समय में हो सकती हैं (संवाद पूरा होने के बाद)।

अधिक जानकारी (और ब्राउज़र समर्थन) इन दो घटनाओं के लिए के लिए:

https://developer.mozilla.org/en-US/docs/DOM/window.onbeforeprint

https://developer.mozilla.org/en-US/docs/DOM/window.onafterprint

संक्षिप्त उत्तर: आप प्रिंट प्रवाह में हस्तक्षेप करने की उम्मीद कर रहे हैं, नहीं है । यदि आप प्रिंटिंग के बाद कोड ट्रिगर करने की उम्मीद कर रहे हैं, तो यह काम नहीं करेगा कि आप कैसा चाहते हैं; खराब ब्राउज़र समर्थन की अपेक्षा करें, और शानदार ढंग से अपमानित करने का प्रयास करें।

+2

इसके अतिरिक्त, यदि आप प्रिंट के लिए लेआउट या डिस्प्ले को बदलने की कोशिश कर रहे हैं, तो आपको इसे प्रिंट स्टाइलशीट (या अपने सीएसएस के भीतर '@media प्रिंट' नियमों के साथ) करना चाहिए और जावास्क्रिप्ट –

+0

@ टॉमपेट्रोसेंटि मैं पूरी तरह से सहमत नहीं हूं, लेकिन वहां हैं कुछ चीजें जिन्हें आप सीएसएस के साथ नहीं कर सकते (जैसे तत्वों के क्रम को बदलना)। [मेरा प्रश्न] देखें (http://stackoverflow.com/questions/25030208/dom-manipulation-on-print- केवल)। – chharvey

+0

यदि आप फ्लेक्सबॉक्स का उपयोग कर सकते हैं तो आप ऑर्डर (डिग्री पर) बदल सकते हैं, लेकिन अन्यथा यह सच है। यदि आपको जेएस की आवश्यकता नहीं है, तो मैं इससे बचूंगा - इससे कुछ अजीब कीड़े पैदा हो सकती हैं। –

0

यदि आप एक परिदृश्य में जहाँ यू प्रिंट संवाद प्रकट होता है या सिर्फ बाद दस्तावेज़ प्रिंटर कतार उपयोग करने के लिए भेज दिया जाता है नीचे घटनाओं window.onafterprint उपयोग करने से पहले कुछ करना चाहते हैं,

+0

मैंने क्रोम में कोशिश की, लेकिन यह काम नहीं करता है। हालांकि यह आईई में हो सकता है, लेकिन आईई यहाँ मेरे लिए अच्छा नहीं है। धन्यवाद। http://stackoverflow.com/a/9920784/578667 – Joe

+1

थोड़ा हैकररीडू के साथ, आप इसे वेबकिट आधारित ब्राउज़र में भी काम करने के लिए प्राप्त कर सकते हैं: http://tjvantoll.com/2012/06/15/detecting-print- अनुरोध-साथ-जावास्क्रिप्ट/केवल एक ही छोड़ दिया गया ओपेरा है, लेकिन एक उद्यमी व्यक्ति शायद इसके लिए पॉलीफिल/हैक के साथ भी आ सकता है। –

9

यह ओवरराइटिंग द्वारा किया जा सकता है, उदाहरण के लिए, window.onbeforeprint

क्रोम का उपयोग करके, मैंने पाया कि अधिक आर्केन window.matchMedia("print").addListener(function() {alert("Print Dialog open.")}) भी काम करता है।

उपयोगकर्ताओं को एक पृष्ठ मुद्रित करने से रोकने के लिए इस बहस योग्य सुविधा का उपयोग किया जा सकता है।

मुझे पहली बार Scribd पर इसका सामना करना पड़ा। वहां, यदि आप मेनू कमांड का उपयोग करके प्रिंट डायलॉग खोलते हैं, तो पेज सामग्री को गहरा कर दिया जाएगा और एक चेतावनी पॉप-ओवर संदेश समझाता है कि आप पृष्ठ को प्रिंट क्यों नहीं कर सकते हैं। (पूर्ण विश्लेषण के लिए नोट: उस पृष्ठ पर, नियंत्रण-पी भी अतिरंजित है ताकि आप प्रिंट संवाद को खोलने के लिए इसका उपयोग नहीं कर सकें। इसके अतिरिक्त, प्रिंटर आउटपुट के लिए @media सीएसएस है जो सामग्री को छुपाता है; फ़ायरफ़ॉक्स पर परीक्षण किया गया है)।

+0

क्रोम में, आपका "आर्केन" समाधान काम करता है, लेकिन यह चार बार होता है। – chharvey

+2

मुझे कल्पना है कि यदि आपके पास एकाधिक प्रिंट शैलियों या प्रिंट स्टाइलशीट हैं तो यह आपके जितने लोगों के लिए आग लग जाएगी। जब मैं इस कोड को कोई प्रिंट शैलियों के साथ चलाता हूं तो यह एक बार चलता है। –

0

यहां आने वाले किसी भी व्यक्ति के लिए बूटस्ट्रैप का उपयोग करके एक विकल्प ढूंढने के लिए, मैंने इस को प्राप्त करने के लिए निम्न कोड का उपयोग किया था जब एक प्रिंट बटन क्लिक किया गया था। यह नहीं काम वे जब प्रेस होगा Ctrl + पी

$("#print_page").click(function(){ 
$("#print_section").addClass('visible-print-block'); 
window.print(); 
$("#print_section").removeClass('visible-print-block');}) 

तुम कुछ भी आप मुद्रित नहीं करना चाहते करने के लिए छिपा प्रिंट जोड़ने और फिर आईडी (या एक वर्ग को जोड़ने के लिए यदि आप अधिक से अधिक करने की जरूरत है एक खंड) print_section के बिट को मुद्रित करना चाहते हैं! बिट हैकी लेकिन यह काम करता है!

+0

आप उसी कोड/फ़ंक्शन को आग लगाने के लिए [CTRL + P] (https://stackoverflow.com/a/3680946/479156) ओवरराइड कर सकते हैं, लेकिन प्रिंट करने के अधिक तरीके होने के बाद भी यह 100% प्रमाण नहीं है। – Ivar

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