बंद विंडो स्वचालित रूप से मुद्रण संवाद बंद होने के बाद


86

मेरे पास एक टैब खुला है जब उपयोगकर्ता एक बटन क्लिक करता है। पर onloadमैं इसे प्रिंट संवाद को लाने के लिए है, लेकिन उपयोगकर्ता ने मुझसे पूछा कि क्या यह संभव था, मुद्रित करने के लिए यह प्रिंटर को भेजे जाने के बाद कि अगर टैब को बंद कर सकता है। मुझे यकीन नहीं है कि यह किया जा सकता है। मैंने उपयोग करने की कोशिश की है setTimeout();, लेकिन यह समय की एक निर्धारित अवधि नहीं है क्योंकि उपयोगकर्ता विचलित हो सकता है और टैब को फिर से खोलना पड़ सकता है। क्या इसे पूरा करने का कोई रास्ता है?



जवाबों:


113

यदि आप प्रिंट () कॉल के तुरंत बाद विंडो को बंद करने की कोशिश करते हैं, तो यह तुरंत विंडो बंद कर सकता है और प्रिंट () काम नहीं करेगा। यह वह है जो आपको नहीं करना चाहिए :

window.open();
...
window.print();
window.close();

यह समाधान फ़ायरफ़ॉक्स में काम करेगा, क्योंकि प्रिंट () कॉल पर, यह तब तक इंतजार करता है जब तक कि छपाई नहीं हो जाती है और फिर यह जावास्क्रिप्ट और विंडो को बंद करना जारी रखता है। IE इसके साथ विफल हो जाएगा क्योंकि यह प्रिंट () कॉल की प्रतीक्षा किए बिना बंद () फ़ंक्शन को कॉल करता है। प्रिंटिंग होने से पहले पॉपअप विंडो बंद हो जाएगी।

इसे हल करने का एक तरीका "onafterprint" इवेंट का उपयोग करके है, लेकिन मैं आपको इसकी अनुशंसा करता हूं कि ये ईवेंट केवल IE में काम करता है।

प्रिंट संवाद बंद होने के बाद (मुद्रण किया जाता है या रद्द किया जाता है) सबसे अच्छा तरीका पॉपअप विंडो को बंद करना है। इस समय, पॉपअप विंडो फोकस्ड हो जाएगी और आप पॉपअप को बंद करने के लिए "ऑनफोकस" इवेंट का उपयोग कर सकते हैं।

ऐसा करने के लिए, बस अपने पॉपअप विंडो में इस जावास्क्रिप्ट एम्बेडेड कोड डालें:

<script type="text/javascript">
window.print();
window.onfocus=function(){ window.close();}
</script>

आशा है कि यह hepls ;-)

अपडेट करें:

नए क्रोम ब्राउज़रों के लिए यह अभी भी बहुत जल्द बंद हो सकता है यहाँ देखें । मैंने यह परिवर्तन लागू कर दिया है और यह सभी वर्तमान ब्राउज़रों के लिए काम करता है: 2/29/16

        setTimeout(function () { window.print(); }, 500);
        window.onfocus = function () { setTimeout(function () { window.close(); }, 500); }

इसके लायक क्या है, यह IE8 में विफल रहता है। प्रिंट संवाद दिखाने से ठीक पहले विंडो बंद हो जाती है।
हीथ

15
यह इस बिंदु पर क्रोम के लिए काम नहीं करता है, क्योंकि क्रोम आंतरिक रूप से प्रिंटिंग को संभालता है, विंडो प्रिंट डायलॉग लोड होने पर फोकस नहीं खोएगी, और इसलिए प्रिंटिंग होने पर फोकस फिर से प्राप्त नहीं होगा। क्रोम के लिए यह काम करने का कोई तरीका?
jlbriggs

6
2016 के फ़रवरी के रूप में यह और अन्य ध्यान के () आधारित जवाब अब क्रोम में काम करता है। एकमात्र काम करने वाला समाधान @noamtcohen है (दुख की बात है कि बहुत कम वोटों की गिनती के साथ)।
जेपी

2
मुझे लगता है कि क्रोम का नवीनतम संस्करण प्रिंट संवाद नहीं दिखा रहा है जब तक कि पेज पर छवियां लोड नहीं हुई हैं, लेकिन यह पहले बंद कर रहा है, इसलिए पृष्ठ लोड होने से पहले बंद हो जाता है (प्रिंट संवाद कभी नहीं दिखाता है)। ठीक करने के लिएwindow.onload = function () { window.print(); setTimeout(window.close, 500); };
ब्रायन लीशमैन

3
उपरोक्त समाधान डॉन किसी भी अधिक काम नहीं करता है, कृपया इवेंट श्रोता onafterprint को बंद खिड़की window.onafterprint = function () {window.close ()} में जोड़ें;
राहत हमीद

91

यह वही है जिसके साथ मैं आया था, मुझे नहीं पता कि बंद करने से पहले थोड़ी देरी क्यों होती है।

 window.print();
 setTimeout(window.close, 0);

1
यह दिलचस्प है कि यह कम-रेटेड उत्तर वर्तमान में सही है। फरवरी 2016 तक क्रोम में अब कोई भी फोकस () आधारित उत्तर काम नहीं करता है। यह समाधान विंडोज और ओएस एक्स, IE9 +, एंड्रॉइड क्रोम और आईओएस सफारी पर एफएफ, क्रोम और सफारी में काम करता है। हमने पुराने IE में केवल पुष्टिकरण संवादों का अनुभव किया है। अन्य सभी करीब से।
जेपी

6
17 मार्च तक, यह मेरे लिए ठीक उसी तरह से काम नहीं कर रहा था जैसा कि क्रोम (56) में है, लेकिन कुछ समय जोड़कर काम किया। window.print (); setTimeout (window.close, 500);
jAC

जैसा कि जेएसी ने उल्लेख किया है, इसे काम करने के लिए अधिक समय की आवश्यकता है। खदान पर, 10ms पर्याप्त नहीं था, लेकिन 100 था। यह प्रतीत होता है कि प्रिंट-पूर्वावलोकन को प्रस्तुत करने में कितना समय लगता है। 10 एमएस में मेरा सेट के साथ, यह केवल पृष्ठ के आंशिक रूप से प्रदान किए गए संस्करण को मुद्रित करता है। 100 के साथ मुझे पूरी बात मिल गई।
जैकब ईविंग

1
उस पर विस्तार करने के लिए, यह ~ लगता है ~ जैसा कि प्रिंट विंडो पूरी तरह से गाया जाता है (वैसे भी एक मैकबुक पर क्रोम में) एक बार टाइमआउट रोक दिया जाता है, और खिड़की बंद होने के बाद गिने गए शेष की गणना की जाती है।
जैकब ईविंग

1
आपको 0 की आवश्यकता नहीं है, यह डिफ़ॉल्ट है
ब्रायन लीशमैन 20

14

बस:

window.print();
window.close();

यह काम करता हैं।


2
यह क्रोम पर मेरे लिए मज़बूती से काम नहीं करता है। कभी-कभी यह काम करता है, लेकिन कभी-कभी प्रिंट डायलॉग आने से ठीक पहले विंडो तुरंत बंद हो जाती है। मैं टाइमआउट को 5000 तक बढ़ाकर ऐसा होने से रोक सकता हूं, लेकिन फिर कभी-कभी प्रिंटिंग के बाद विंडो बंद होने में 5 सेकंड तक का समय लगता है। मुझे यकीन नहीं है कि यहां क्या हो रहा है, लेकिन यह अलग-अलग ब्राउज़रों के मजबूत होने की संभावना नहीं है।
गतिमान

1
जैसा कि नीचे उल्लेख किया गया है, पूर्ण क्रॉस-ब्राउज़र समाधान अधिक जटिल है।
एरिक

1
मत भूलना: Scripts may close only the windows that were opened by it.चेतावनी।
कैस ब्लोम

उपरोक्त समाधान डॉन किसी भी अधिक काम नहीं करता है, कृपया इवेंट श्रोता onafterprint को विंडो बंद करें। window.onafterprint = function(){ window.close()};
राहत हमीद

12

मैं सिर्फ यह लिखना चाहता हूं कि मैंने क्या किया है और मेरे लिए क्या काम किया है (जैसा कि मैंने कोशिश की थी और कुछ नहीं)।

मुझे समस्या थी कि IE प्रिंट संवाद के उठने से पहले ही खिड़कियां बंद कर देगा।

बहुत सारे परीक्षण और त्रुटि के परीक्षण के बाद, यह वही है जो मुझे काम करने के लिए मिला है:

var w = window.open();
w.document.write($('#data').html()); //only part of the page to print, using jquery
w.document.close(); //this seems to be the thing doing the trick
w.focus();
w.print();
w.close();

यह सभी ब्राउज़रों में काम करने लगता है।


काम करने लगा। यह अब नहीं है, मैं नीचे अपना कोड पोस्ट करूँगा।
रेमो

10

इस कोड ने मेरे लिए पूरी तरह से काम किया:

<body onload="window.print()" onfocus="window.close()">

जब पृष्ठ खुलता है तो यह स्वचालित रूप से प्रिंट संवाद खोलता है और प्रिंट करने या रद्द करने के बाद यह विंडो बंद कर देता है।

आशा करता हूँ की ये काम करेगा,


यह खुराक काम नहीं करती है यदि आपने html या jsp नहीं छापने के लिए pdf खोला है तो मैं ओनलोड बॉडी कहाँ रख सकता हूँ?
शरीफ

9

निश्चित रूप से ऐसा करने से यह आसानी से हल हो जाता है:

      <script type="text/javascript">
         window.print();
         window.onafterprint = window.close();
      </script>

या यदि आप उदाहरण के लिए कुछ करना चाहते हैं तो पिछले पृष्ठ पर जाएं।

    <script type="text/javascript">
        window.print();
        window.onafterprint = back;

        function back() {
            window.history.back();
        }
    </script>

window.close ();
मुस्तफा

नोट: window.onafterprint = window.close();होना चाहिए window.onafterprint = window.close;पूर्व प्रदान करती है परिणाम के window.close()लिए onafterprint। यह window.close()हैंडलर सेट होने पर तुरंत चलने का कारण बनेगा , और onafterprintईवेंट के उठने पर चलाने के लिए कुछ भी नहीं । उत्तरार्द्ध window.closeघटना हैंडलर के रूप में असाइन करता है , जो कि हम चाहते हैं।
केई

इसके अलावा, कुछ ब्राउज़रों में, कोड निष्पादन window.print();तब तक रुकता है जब तक कि प्रिंट संवाद खारिज नहीं किया जाता है। जब ऐसा होता है, तो onafterprintईवेंट को onafterprintसौंपा जाने से पहले उठाया जाना संभव है। इस प्रकार, window.onafterprint = window.close;पहले आना बेहतर होगा window.print();। अन्यथा, इस उत्तर में उपयोग किया जाने वाला दृष्टिकोण अन्य उत्तरों द्वारा सुझाए गए ऑनफोकस या सेटटाइमआउट आधारित लोगों की तुलना में बेहतर काम करता है।
केई

8

यह एक क्रॉस-ब्राउज़र समाधान है जो पहले से ही परीक्षण किया गया है जो 2016/05 तक क्रोम, फ़ायरफ़ॉक्स, ओपेरा पर गया है।

ध्यान रखें कि Microsoft Edge में एक बग है जो प्रिंट रद्द होने पर खिड़की को बंद नहीं करेगा। संबंधित लिंक

var url = 'http://...';
var printWindow = window.open(url, '_blank');
printWindow.onload = function() {
    var isIE = /(MSIE|Trident\/|Edge\/)/i.test(navigator.userAgent);
    if (isIE) {

        printWindow.print();
        setTimeout(function () { printWindow.close(); }, 100);

    } else {

        setTimeout(function () {
            printWindow.print();
            var ival = setInterval(function() {
                printWindow.close();
                clearInterval(ival);
            }, 200);
        }, 500);
    }
}

7

क्रोम का उपयोग करके मैंने काम करने window.onfocus=function() { window.close(); }के <body ... onfocus="window.close()">लिए और पाने के लिए थोड़ी देर की कोशिश की । मेरे परिणाम:

  1. मैंने अपना प्रिंट संवाद बंद कर दिया था, कुछ नहीं हुआ।
  2. मैंने अपने ब्राउज़र में विंडो / टैब बदल दिए, फिर भी कुछ नहीं।
  3. मेरी पहली विंडो / टैब में वापस बदल गया और फिर window.onfocus इवेंट ने विंडो को बंद कर दिया।

मैंने भी कोशिश की <body onload="window.print(); window.close()" >जिसके परिणामस्वरूप विंडो बंद हो गई इससे पहले कि मैं प्रिंट संवाद में कुछ भी क्लिक कर सकूं।

मैं उन दोनों का उपयोग नहीं कर सका। इसलिए मैंने दस्तावेज़ की स्थिति पर नज़र रखने के लिए थोड़ा सा Jquery का उपयोग किया और यह कोड मेरे लिए काम करता है।

<script type="text/javascript">
    var document_focus = false; // var we use to monitor document focused status.
    // Now our event handlers.
    $(document).focus(function() { document_focus = true; });
    $(document).ready(function() { window.print(); });
    setInterval(function() { if (document_focus === true) { window.close(); }  }, 500);
</script>

बस सुनिश्चित करें कि आपने jquery को शामिल किया है और फिर जिस HTML को आप प्रिंट कर रहे हैं, उसे कॉपी / पेस्ट करें। यदि उपयोगकर्ता ने पीडीएफ के रूप में मुद्रित, सहेजा है या प्रिंट कार्य को रद्द कर दिया है तो विंडो / टैब स्वयं को नष्ट कर देगा। नोट: मैंने केवल क्रोम में इसका परीक्षण किया है।

संपादित करें

जैसा कि जिप्सी ने टिप्पणियों में बताया, दस्तावेज़ फ़ोकस की स्थिति की आवश्यकता नहीं है। आप केवल noamtcohen से उत्तर का उपयोग कर सकते हैं, मैंने अपना कोड उस पर बदल दिया है और यह काम करता है।


यह समाधान मूल विंडो को लटका देने का कारण बनता है यदि उपयोगकर्ता पॉपअप को रद्द या प्रिंट का चयन करने के बजाय कोने में "X" के साथ बंद कर देता है। जुआन के समाधान के रूप में एक ही मुद्दा, जिसे @ जेएफके ने मूल रूप से बताया।
क्लेटन

उपरोक्त जावास्क्रिप्ट का मतलब यह नहीं है कि इसे मुद्रित किया जा रहा है जिसे एक पॉपअप में खोला गया है या जैसा कि मैं एक नए टैब में करता हूं। इस प्रकार इस जावास्क्रिप्ट का मूल विंडो पर कोई प्रभाव नहीं है।
नादो ११

5

यह मेरे लिए काम करता है:

<script>window.onload= function () { window.print();window.close();   }  </script>


5

बस onafterprint घटना हैंडलर द्वारा window.close को लपेटो , यह मेरे लिए काम किया

printWindow.print();
printWindow.onafterprint = () => printWindow.close();

सफारी v12 की आवश्यकता है
पॉल ब्रैडी

4

यह Chrome 59 में अच्छा काम करता है:

window.print();
window.onmousemove = function() {
  window.close();
}

4

मैंने कई चीजें आजमाईं जो काम नहीं आईं। केवल एक चीज जो मेरे लिए काम करती थी:

window.print();
window.onafterprint = function () {
    window.close();
}

क्रोम पर परीक्षण किया गया।


मुझे इससे नफरत है कि यह कितना काम करता है
फ्रांज जस्टिन ब्यूनावेंटुरा

3

निम्न समाधान IE9, IE8, Chrome और FF के नए संस्करणों के लिए 2014-03-10 तक काम कर रहा है। परिदृश्य यह है: आप एक विंडो (ए) में हैं, जहां आप मुद्रण प्रक्रिया शुरू करने के लिए एक बटन / लिंक पर क्लिक करते हैं, फिर मुद्रित होने वाली सामग्री के साथ एक नई विंडो (बी) खोली जाती है, मुद्रण संवाद तुरंत दिखाया जाता है। और आप या तो रद्द कर सकते हैं या प्रिंट कर सकते हैं, और फिर नई विंडो (बी) अपने आप बंद हो जाती है।

निम्न कोड इसकी अनुमति देता है। इस जावास्क्रिप्ट कोड को HTML में विंडो A (विंडो B के लिए नहीं) में रखा जाना है:

/**
 * Opens a new window for the given URL, to print its contents. Then closes the window.
 */
function openPrintWindow(url, name, specs) {
  var printWindow = window.open(url, name, specs);
    var printAndClose = function() {
        if (printWindow.document.readyState == 'complete') {
            clearInterval(sched);
            printWindow.print();
            printWindow.close();
        }
    }
    var sched = setInterval(printAndClose, 200);
};

प्रक्रिया शुरू करने के लिए बटन / लिंक को बस इस फ़ंक्शन को लागू करना है, जैसे:

openPrintWindow('http://www.google.com', 'windowTitle', 'width=820,height=600');

यह Chrome में तब तक काम करता है, जब तक यूजर BUT (B) को बंद कर देता है या ऑपरेशन को रद्द कर देता है यदि उपयोगकर्ता विंडो (B) को बंद कर देता है, तो (A) हैंग हो जाता है (क्या मैं Chrome में कहता हूं?)। परीक्षण (क्रोम में) jsfiddle.net/qy6QV/2/show और विंडो बंद करें। फिर इसे फिर से लोड करने की कोशिश करें ... लटका दिया।
JFK

2
<!doctype html>
<html>
<script>
 window.print();
 </script>
<?php   
date_default_timezone_set('Asia/Kolkata');
include 'db.php'; 
$tot=0; 
$id=$_GET['id'];
    $sqlinv="SELECT * FROM `sellform` WHERE `id`='$id' ";
    $resinv=mysqli_query($conn,$sqlinv);
    $rowinv=mysqli_fetch_array($resinv);
?>
        <table width="100%">
           <tr>
                <td style='text-align:center;font-sie:1px'>Veg/NonVeg</td>  
            </tr>
            <tr>
                <th style='text-align:center;font-sie:4px'><b>HARYALI<b></th>  
            </tr>   
            <tr>
                <td style='text-align:center;font-sie:1px'>Ac/NonAC</td>  
            </tr>
            <tr>
                <td style='text-align:center;font-sie:1px'>B S Yedurappa Marg,Near Junne Belgaon Naka,P B Road,Belgaum - 590003</td>  
            </tr>
        </table>
        <br>    
        <table width="100%">
           <tr>
                <td style='text-align:center;font-sie:1'>-----------------------------------------------</td>  
            </tr>
        </table>

        <table  width="100%" cellspacing='6' cellpadding='0'>

            <tr>
                <th style='text-align:center;font-sie:1px'>ITEM</th>
                <th style='text-align:center;font-sie:1px'>QTY</th>
                <th style='text-align:center;font-sie:1px'>RATE</th>
                <th style='text-align:center;font-sie:1px'>PRICE</th>
                <th style='text-align:center;font-sie:1px' >TOTAL</th>
            </tr>

            <?php
            $sqlitems="SELECT * FROM `sellitems` WHERE `invoice`='$rowinv[0]'";
            $resitems=mysqli_query($conn,$sqlitems);
            while($rowitems=mysqli_fetch_array($resitems)){
            $sqlitems1="SELECT iname FROM `itemmaster` where icode='$rowitems[2]'";
            $resitems1=mysqli_query($conn,$sqlitems1);
            $rowitems1=mysqli_fetch_array($resitems1);
            echo "<tr>
                <td style='text-align:center;font-sie:3px'  >$rowitems1[0]</td>
                <td style='text-align:center;font-sie:3px' >$rowitems[5]</td>
                <td style='text-align:center;font-sie:3px' >".number_format($rowitems[4],2)."</td>
                <td style='text-align:center;font-sie:3px' >".number_format($rowitems[6],2)."</td>
                <td style='text-align:center;font-sie:3px' >".number_format($rowitems[7],2)."</td>
              </tr>";
                $tot=$tot+$rowitems[7];
            }

            echo "<tr>
                <th style='text-align:right;font-sie:1px' colspan='4'>GRAND TOTAL</th>
                <th style='text-align:center;font-sie:1px' >".number_format($tot,2)."</th>
                </tr>";
            ?>
        </table>
     <table width="100%">
           <tr>
                <td style='text-align:center;font-sie:1px'>-----------------------------------------------</td>  
            </tr>
        </table>
        <br>
        <table width="100%">
            <tr>
                <th style='text-align:center;font-sie:1px'>Thank you Visit Again</th>  
            </tr>
        </table>
<script>
window.close();
</script>
</html>

सिंगल बटन क्लिक के साथ php और जावास्क्रिप्ट के साथ नई टैब विंडो को प्रिंट और बंद करें


1

इसने मुझे पॉपअप में HTML इंजेक्ट करने के लिए सबसे अच्छा काम किया जैसे कि <body onload="window.print()"... IE, Chrome, और FF (मैक पर) के लिए उपरोक्त कार्य लेकिन विंडोज पर कोई FF नहीं।

https://stackoverflow.com/a/11782214/1322092

var html = '<html><head><title></title>'+
               '<link rel="stylesheet" href="css/mycss.css" type="text/css" />'+
               '</head><body onload="window.focus(); window.print(); window.close()">'+
               data+
               '</body></html>';

1

यहाँ मैं क्या करूँ ...।

क्वेरी पैरामीटर के आधार पर विंडो को स्वयं प्रिंट और बंद करने में सक्षम करें।

JQuery की आवश्यकता है। सभी पृष्ठों के साथ काम करने के लिए _Layout या मास्टर पेज में किया जा सकता है।

पृष्ठ को प्रिंट और बंद करने के लिए कहने वाले URL में एक पैराम को पास करने के लिए विचार किया जाता है, अगर परम सेट हो जाता है तो jQuery "तैयार" ईवेंट विंडो को प्रिंट करता है, और फिर जब पृष्ठ पूरी तरह से लोड हो जाता है (मुद्रण के बाद) "ऑनलोड" कहा जाता है जो खिड़की बंद कर देता है। यह सब प्रतीत होता है कि अतिरिक्त चरणों को बंद करने से पहले खिड़की के प्रिंट होने का इंतजार करना है।

Html बॉडी ऐड और ऑनलोड इवेंट में जो printAndCloseOnLoad () कहता है। इस उदाहरण में हम cshtm का उपयोग कर रहे हैं, आप परम प्राप्त करने के लिए जावास्क्रिप्ट का उपयोग भी कर सकते हैं।

<body onload="sccPrintAndCloseOnLoad('@Request.QueryString["PrintAndClose"]');">

जावास्क्रिप्ट में फ़ंक्शन जोड़ें।

function printAndCloseOnLoad(printAndClose) {
    if (printAndClose) {
        // close self without prompting
        window.open('', '_self', ''); window.close();
    }
}

और jQuery के तैयार घटना।

$(document).ready(function () {
    if (window.location.search.indexOf("PrintAndClose=") > 0)
        print();
});

अब कोई भी URL खोलते समय, क्वेरी स्ट्रिंग परम “PrintAndClose = true” को जोड़ें और यह प्रिंट और बंद हो जाएगा।


1

मेरे लिए, मेरा अंतिम समाधान कई उत्तरों का मिश्रण था:

    var newWindow = window.open();
    newWindow.document.open();
    newWindow.document.write('<html><link rel="stylesheet" href="css/normalize-3.0.2.css" type="text/css" />'
            + '<link rel="stylesheet" href="css/default.css" type="text/css" />'
            + '<link rel="stylesheet" media="print" href="css/print.css" type="text/css" />');

    newWindow.document.write('<body onload="window.print();" onfocus="window.setTimeout(function() { window.close(); }, 100);">');
    newWindow.document.write(document.getElementById(<ID>).innerHTML);
    newWindow.document.write('</body></html>');
    newWindow.document.close();
    newWindow.focus();

1

यह मेरे लिए (2018/02) काम किया है। मुझे एक अलग अनुरोध की आवश्यकता थी क्योंकि मेरा प्रिंट अभी तक स्क्रीन पर नहीं आया था। उपरोक्त कुछ उत्कृष्ट प्रतिक्रियाओं के आधार पर, जिनके लिए मैं आप सभी को धन्यवाद देता हूं, मैंने देखा:

  • w.onloadपहले सेट नहीं किया जाना चाहिए w.document.write(data)
    यह अजीब लगता है क्योंकि आप हुक को पहले से सेट करना चाहेंगे। मेरा अनुमान: बिना सामग्री के विंडो खोलने पर हुक पहले ही निकाल दिया जाता है। चूंकि इसे निकाल दिया गया है, यह फिर से आग नहीं लगाएगा। लेकिन, जब एक नए के साथ प्रसंस्करण अभी भी चल रहा हैdocument.write() तो हुक तब कहा जाएगा जब प्रसंस्करण समाप्त हो गया हो।
  • w.document.close()अभी भी आवश्यक है। नहीं तो कुछ नहीं होता।

मैंने इसे क्रोम 64.0, IE11 (11.248), एज 41.16299 (एज HTML 16.16299), एफएफ 58.0.1 में परीक्षण किया है। वे पॉपअप के बारे में शिकायत करेंगे, लेकिन यह प्रिंट करता है।

function on_request_print() {
  $.get('/some/page.html')
    .done(function(data) {
      console.log('data ready ' + data.length);
      var w = window.open();
      w.document.write(data);
      w.onload = function() {
        console.log('on.load fired')
        w.focus();
        w.print();
        w.close();
      }
      console.log('written data')
      //this seems to be the thing doing the trick
      w.document.close();
      console.log('document closed')
    })
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js">
</script>
<a onclick="on_request_print();">Print rapportage</a>

1
const printHtml = async (html) => {
    const printable = window.open('', '_blank', 'fullscreen=no');
    printable.document.open();
    printable.document.write(`<html><body onload="window.print()">${html}</body></html>`);
    await printable.print();
    printable.close();
};

यहाँ मेरा ES2016 समाधान है।


1
नमस्ते स्टुअर्ट, और ढेर अतिप्रवाह में आपका स्वागत है! क्या आप बता सकते हैं कि यह कोड ओपी और अन्य उपयोगकर्ताओं को अधिक मदद करने के लिए क्यों काम करता है? धन्यवाद!
हीथ

1

यह मेरे लिए पूरी तरह से @holger का काम करता है, हालाँकि, मैंने इसे संशोधित किया है और मुझे बेहतर तरीके से सूट करता है, विंडो अब पॉप अप हो जाती है और तुरंत ही आप प्रिंट या रद्द बटन दबा देते हैं।

function printcontent()
{ 
var disp_setting="toolbar=yes,location=no,directories=yes,menubar=yes,"; 
disp_setting+="scrollbars=yes,width=300, height=350, left=50, top=25"; 
var content_vlue = document.getElementById("content").innerHTML; 
var w = window.open("","", disp_setting);
w.document.write(content_vlue); //only part of the page to print, using jquery
w.document.close(); //this seems to be the thing doing the trick
w.focus();
w.print();
w.close();
}"

1

jQuery:

$(document).ready(function(){ 
  window.print();
  setTimeout(function(){ 
             window.close();
  }, 3000);
});

0

IE था (है?) onbeforeprintऔर onafterprintघटनाओं: आप उस के लिए इंतजार कर सकता है, लेकिन यह केवल IE पर काम करेगा (जो ठीक हो सकता है या नहीं भी हो सकता है)।

वैकल्पिक रूप से, आप कोशिश कर सकते हैं कि फोकस प्रिंट संवाद से खिड़की पर वापस आए और इसे बंद करें। अमेज़ॅन वेब सेवा अपने इनवॉइस प्रिंट संवादों में ऐसा करती है: आप प्रिंट बटन दबाते हैं, यह प्रिंट-फ्रेंडली दृश्य को खोलता है और तुरंत प्रिंटर संवाद को खोलता है। यदि आप प्रिंट को हिट करते हैं या प्रिंट डायलॉग को रद्द करते हैं और फिर प्रिंट-फ्रेंडली दृश्य तुरंत बंद हो जाता है।


0

ब्राउज़र में काम करने के लिए इस तरह से बहुत दर्द हो रहा है।

मैं मूल रूप से एक ही तरह का काम करना चाह रहा था - प्रिंट के लिए स्टाइल किया गया एक नया पेज खोलें, इसे जेएस का उपयोग करके प्रिंट करें, फिर इसे फिर से बंद करें। यह एक बुरा सपना था।

अंत में, मैंने प्रिंट करने योग्य पृष्ठ पर बस क्लिक-थ्रू करने का विकल्प चुना और फिर एक प्रिंट आरंभ करने के लिए नीचे दिए गए JS का उपयोग करें, फिर अपने आप को उस जगह पर पुनः निर्देशित करें जहाँ मैं जाना चाहता था जब किया (इस उदाहरण में PHP में एक चर सेट के साथ)।

मैंने इसे OSX और Windows, और IE11-8 पर क्रोम और फ़ायरफ़ॉक्स पर परीक्षण किया है, और यह सभी पर काम करता है (हालाँकि यदि वास्तव में आपके पास कोई प्रिंटर स्थापित नहीं है तो IE8 थोड़ा सा फ्रीज होगा)।

हैप्पी हंटिंग (प्रिंटिंग)।

<script type="text/javascript">

   window.print(); //this triggers the print

   setTimeout("closePrintView()", 3000); //delay required for IE to realise what's going on

   window.onafterprint = closePrintView(); //this is the thing that makes it work i

   function closePrintView() { //this function simply runs something you want it to do

      document.location.href = "'.$referralurl.'"; //in this instance, I'm doing a re-direct

   }

</script>

0

बस इस जावा स्क्रिप्ट का उपयोग करें

 function PrintDiv() {
    var divContents = document.getElementById("ReportDiv").innerHTML;
    var printWindow = window.open('', '', 'height=200,width=400');
    printWindow.document.write('</head><body >');
    printWindow.document.write(divContents);
    printWindow.document.write('</body></html>');
    printWindow.document.close();
    printWindow.print();
    printWindow.close();
}

यह सबमिट या क्लिक बटन को रद्द करने के बाद विंडो बंद कर देगा


0

IE11 पर ऑनफोकस घटना को दो बार कहा जाता है, इस प्रकार उपयोगकर्ता को विंडो बंद करने के लिए दो बार प्रेरित किया जाता है। इसे थोड़े से बदलाव से रोका जा सकता है:

<script type="text/javascript">
  var isClosed = false;
  window.print();
  window.onfocus = function() {
    if(isClosed) { // Work around IE11 calling window.close twice
      return;
    }
    window.close();
    isClosed = true;
  }
</script>

0

इसने मेरे लिए FF 36, Chrome 41 और IE 11. में काम किया, भले ही आप प्रिंट को रद्द कर दें, और भले ही आपने टॉप-राइट "X" के साथ प्रिंट डायलॉग को बंद कर दिया हो।

var newWindow=window.open(); 
newWindow.document.open();
newWindow.document.write('<HTML><BODY>Hi!</BODY></HTML>'); //add your content
newWindow.document.close();
newWindow.print();      

newWindow.onload = function(e){ newWindow.close(); }; //works in IE & FF but not chrome 

//adding script to new document below makes it work in chrome 
//but alone it sometimes failed in FF
//using both methods together works in all 3 browsers
var script   = newWindow.document.createElement("script");
script.type  = "text/javascript";
script.text  = "window.close();";
newWindow.document.body.appendChild(script);

0
setTimeout(function () { window.print(); }, 500);
        window.onfocus = function () { setTimeout(function () { window.close(); }, 500); }

यह मेरे लिए पूरी तरह से काम है। आशा करता हूँ की ये काम करेगा


0

यह मेरे लिए Chrome पर काम करता है (दूसरों पर आज़माया नहीं गया)

$(function(){
    window.print();
    $("body").hover(function(){
        window.close();
    });
});

0

मैंने यह कोशिश की और यह काम करता है

var popupWin = window.open('', 'PrintWindow', 
'width=650,height=650,location=no,left=200px');
popupWin.document.write(data[0].xmldata);
popupWin.print();
popupWin.close();
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.