2010-03-15 21 views
6

मेरे पास एक .NET एप्लिकेशन है जो गतिशील रूप से एक छोटा HTML पृष्ठ बनाता है और इसे जावास्क्रिप्ट दस्तावेज़.ऑपेन विधि का उपयोग करके एक नई विंडो में पॉप अप करता है। उस कार्यक्षमता के साथ सब कुछ ठीक काम कर रहा है।आप जावास्क्रिप्ट में पॉपअप विंडो से कैसे प्रिंट करते हैं?

अब मैं HTML पृष्ठ पर एक बटन जोड़ना चाहता हूं जो पृष्ठ को प्रिंट करता है। मैं कोई लाभ नहीं हुआ निम्नलिखित कोड का उपयोग कर की कोशिश की है:

<a href='print.html' onClick='window.print();return false;'> 
<img src='images/printer.png' height='32px' width='32px'></a> 

जब बटन पॉप अप विंडो में क्लिक किया जाता है, कुछ नहीं होता। लेकिन जब इस पृष्ठ का स्रोत कोड सहेजा जाता है और ब्राउज़र में एक अलग पृष्ठ के रूप में लोड किया जाता है, तो प्रिंट बटन पूरी तरह से काम करता है। तो ऐसा लगता है कि समस्या इस तथ्य के कारण होती है कि कोड पॉपअप विंडो में है। [अब समस्या यह प्रतीत होती है कि पॉपअप विंडो को खोले जाने के बाद लिखा गया कोड।] क्या कोई इस समस्या या किसी भी विकल्प को ठीक करने का तरीका जानता है?

संपादित करें:

अन्य विधि यह है कि मैं एक ही परिणाम के साथ की कोशिश की है:

<input type='button' onclick='window.print()' value='Print' /> 

और

<a href='javascript:window.print()'> 
<img src='images/printer.png' height='32px' width='32px'></a> 

संपादित करें पर दोबारा:

ऊपर कोड फ़ायरफ़ॉक्स में काम करता है, लेकिन आईई 7 में नहीं। आईई के आसपास एक काम पर कोई विचार?

संपादित करें अभी तक फिर से:

यहाँ एक परीक्षण का मामला है कि npupposted नीचे कोड का उपयोग कर रहा है। एक अलग HTML फ़ाइल में रहने वाले पॉपअप विंडो के कोड के बजाय, मैं एक खाली यूआरएल खोल रहा हूं और उसके बाद कोड लिख रहा हूं। ऐसा लगता है कि समस्या का कारण क्या है।

<html> 
<head> 
    <title>main</title> 
</head> 
<body> 
    <h1> 
     Pop & print</h1> 
    <button onclick="pop();"> 
     Pop</button> 

    <script type="text/javascript"> 
     var POP; 
     function pop() { 
      var newWin = window.open('', 'thePopup', 'width=350,height=350'); 
     newWin.document.write("<html><head><title>popup</title></head><body><h1>Pop</h1>" + 
      "<p>Print me</p><a href='print.html' onclick='window.print();return false;'>" + 
      "<img src='images/printer.png' height='32px' width='32px'></a></body></html>"); 
     } 
    </script> 

</body> 
</html> 

उत्तर

1

मैं मानक HTML मार्कअप के साथ एक खाली HTML पृष्ठ बनाने के द्वारा समस्या को हल कर दिया है। मैंने फिर एक नया डोम तत्व बनाकर और आंतरिक HTML संपादित करके सामग्री को जोड़ा। जिसके परिणामस्वरूप कोड उदाहरण के रूप में एक ही है, बस निम्नलिखित के साथ newWin.document.write आदेश की जगह:

var newDiv = newWin.document.createElement('div'); 
newDiv.innerHTML = "<h1>Pop</h1>" + 
     "<p>Print me</p><a href='print.html' onclick='window.print();return false;'>" + 
     "<img src='images/printer.png' height='32px' width='32px'></a>" 
newWin.document.body.appendChild(newDiv); 

जबकि इस मुद्दे को हल कर दिया गया है, मैं ईमानदारी से यकीन है कि का सही कारण था क्या नहीं कर रहा हूँ मुसीबत। अगर किसी के पास कोई विचार है, तो मुझे उन्हें सुनकर खुशी होगी।

3

क्योंकि आप एक वापसी एंकर टैग की onclick घटना में झूठी कर रहे हैं यह हो सकता है।

इस प्रयास करें:

<input type="button" onclick="window.print()" value="Print" /> 
+0

यह एक ही परिणाम था, एक अलग ब्राउज़र विंडो में काम करता है लेकिन एक पॉपअप से नहीं। – sglantz

+0

हम्म! जब मैं बटन पर क्लिक करता हूं तो यह प्रिंटर का चयन करने के लिए प्रिंटर स्टैक खोलता है। क्या आपके पास प्रिंटर संलग्न हैं? शायद यह प्रिंटर खोजने में सक्षम नहीं है? लेकिन किसी भी तरह इसे प्रिंटर चयन बॉक्स खोलना चाहिए। – azamsharp

+0

क्या आपने पॉपअप विंडो से कोड का प्रयास किया था? ऐसा लगता है कि समस्या का कारण क्या है। – sglantz

1

आप कोशिश कर सकते हैं:

<input type="button" onclick="self.print()" value="Print" /> 

या:

<input type="button" onclick="window.focus();window.print()" value="Print" /> 

लेकिन इस Cross-Frame Scripting में प्रतिबंध के कारण MSIE में काम न करे। ऐसा करने का सबसे अच्छा तरीका, मुझे लगता है कि प्रिंट विंडो को मुख्य विंडो पर रखना है।

<script language="javascript"> 
    var winref = window.open('print.html','windowName','width=400,height=400'); 
</script> 

<form> 
    <input type="button" value="Print Popup" onclick="if (window.print) winref.print()"> 
</form> 
+0

पहले दो तरीकों में से कोई भी काम नहीं किया। तीसरी विधि आदर्श नहीं है और अधिक जटिल बना दी गई है क्योंकि एचटीएमएल पेज के लिए कोड विभिन्न पैरामीटर के आधार पर नेट कोड से उत्पन्न होता है। – sglantz

+0

बुरी खबरों के वाहक होने के लिए खेद है। अगर यह मैं था, कोड में जहां आप बटन/लिंक उत्पन्न करते हैं जो पॉपअप खोलता है, तो मैं दो बनाउंगा। "परिणाम दिखाएं" और "प्रिंट परिणाम" या जो कुछ भी ... – ghoppe

+0

ऐसा लगता है कि मुझे उस तरह से सिर करना पड़ सकता है, लेकिन मैं अभी तक हार नहीं दे रहा हूं। – sglantz

0

आप क्या खिड़की आप से खोला में है मुद्रित करने के लिए चाहते हैं, तो मैं तुम्हें पॉपअप में

window.opener.print(); 

का उपयोग सुझाव देते हैं।

+0

मैं मुख्य विंडो नहीं, पॉपअप की सामग्री मुद्रित करना चाहता हूं। – sglantz

+0

* दोह *, बहुत खेद है। – npup

1

दिखाए गए कोड से कहीं अधिक कुछ होना चाहिए। मुझे लगता है कि यह ठीक काम करता है (अब कुछ परीक्षण कर रहा है)।

यहां एक छोटा परीक्षण केस है।इसे अपने सेटअप में आज़माएं और देखें कि क्या होता है! मेरी जांच विंडोज विस्टा, आईई 7 और आईई 8 के तहत थी।

main.html:

<html> 
    <head> 
    <title>main</title> 
    </head> 
    <body> 

    <h1>Pop & print</h1> 
    <button onclick="pop();">Pop</button> 
    <script type="text/javascript"> 
     var POP; 
     function pop() { 
     POP = window.open('popup.html', 'thePopup', 'width=350,height=350'); 
     } 
    </script> 

    </body> 
    </html> 

popup.html:

<html> 
    <head> 
    <title>popup</title> 
    </head> 
    <body> 

    <h1>Pop</h1> 
    <p>Print me</p> 
    <a href="print.html" onclick="window.print();return false;"> 
     <img src="images/printer.png" height="32px" width="32px"> 
    </a> 

    </body> 
    </html> 
+0

यह कोड मेरे सेटअप पर काम करता है, लेकिन यह मेरी समस्या पर पूरी तरह लागू नहीं है।बड़ा अंतर यह है कि मैं रनटाइम पर पॉपअप के लिए एचटीएमएल कोड उत्पन्न कर रहा हूं। इस वजह से, मैं एक खाली खिड़की खोल रहा हूं, फिर इसे HTML लिख रहा हूं। मैं आपके कोड का उपयोग करके एक परीक्षण केस के साथ प्रश्न अपडेट करूँगा जो अभी भी समस्या का कारण बनता है। – sglantz

1

आप भूल गया: MSIE से पहले इसे मुद्रित कर सकते हैं

newWin.document.close(); 

दस्तावेज़ बंद होना चाहिए।

8

यहाँ एक समाधान है कि मेरे लिए काम किया है:

newWin.document.write(newhtml); 
newWin.window.location.reload(); // this is the secret ingredient 
newWin.focus();      // not sure if this line is necessary 
newWin.print(); 

मैं 100% यकीन नहीं क्यों यह काम करता है कर रहा हूँ, लेकिन मुझे लगता है कि निम्न में से एक के साथ क्या करना है: (1) एक IE सुरक्षा मुद्दा , (2) एक गुंजाइश मुद्दा (यानी एक नया दस्तावेज़ बनाने के बाद, आईई किस दस्तावेज़ को मुद्रित करने के बारे में उलझन में है), या (3) एक समय मुद्दा - दस्तावेज़ अभी तक एक प्रिंट कमांड को स्वीकार करने के लिए तैयार नहीं है। किसी भी मामले में, पुनः लोड करने के बाद प्रिंट संवाद किसी समस्या के बिना प्रकट होता है।

0

मैं एक पृष्ठ का प्रिंटर अनुकूल संस्करण बनाना चाहता था जो तब स्वचालित रूप से मुद्रित होता है, यही वह है जो मैं आया था, मेरे लिए बहुत अच्छा काम करता है!

function printPage(){ 
    var w = window.open(); 

    var headers = $("#headers").html(); 
    var field= $("#field1").html(); 
    var field2= $("#field2").html(); 

    var html = "<!DOCTYPE HTML>"; 
    html += '<html lang="en-us">'; 
    html += '<head><style></style></head>'; 
    html += "<body>"; 

    //check to see if they are null so "undefined" doesnt print on the page. <br>s optional, just to give space 
    //This allows you to reuse this on lots of pages with the same template 
    if(headers != null) html += headers + "<br/><br/>"; 
    if(field != null) html += field + "<br/><br/>"; 
    if(field2 != null) html += field2 + "<br/><br/>"; 

    html += "</body>"; 
    w.document.write(html); 
    w.window.print(); 
    w.document.close(); 
}; 
1

यह क्रोम में काम करता है:

<body ><img src="image.jpg" alt="" style="display: block; width: 100%; height: 100%;"> 

      <script type="text/javascript"> 
       window.onload = function() { 
        window.print(); 
        setTimeout(function() { 
         window.close(); 
        }, 1); 
       }; 
      </script> 
    </body> 
संबंधित मुद्दे