2009-08-11 22 views
8

To rozwiązanie działa dobrze w przeglądarce Firefox 3.0+, ale IE8/7 to drukowanie całej strony, a nie konkretnego elementu iframe.Drukowanie ukrytej ramki iFrame w IE

Jest to funkcja, która jest wywoływana, gdy link drukuj kliknięciu:

var printfunc= function(){ 
    var url = http://someurl.aspx; 
    //This iFrame has style="visibility: hidden; position: absolute; left: -9000px;" 
    var printIFrame = GetObj('PrintIFrame'); 
    printIFrame.src = url; 
} 

aspx, która zostanie załadowana do ukrytego iframe wywołuje funkcję drukowania na obsługi zdarzenia onload:

<body onload="PrintJS.Print();"> 

funkcja Print:

this.Print = function(){ 
     self.focus(); 
     self.print(); 
     return false; 
} 

próbowałem już także ten z „oknem” zamiast "samego siebie". Oba rozwiązania działają dobrze w FF, ale IE nie wydaje się, aby to prawo było odpowiednie. jakieś pomysły? Rozwiązanie oparte na różnych przeglądarkach byłoby świetne! Ponadto wolałbym używać stylów drukowania CSS, ale treść, którą drukuję, jest inna niż na stronie, stąd potrzeba załadowania html do ukrytego elementu iframe.

+1

Czy to tajna drukarka, o której nikt nie wie? (przepraszam, nie mogłem się oprzeć :)) – KristoferA

Odpowiedz

20

rozwiązanie: w IE, w iframe with visibility: hidden; powoduje, że przeglądarka drukuje rodzica. Zmiana stylu na wysokość: 0px; szerokość: 0 pikseli; rozwiązuje ten problem.

+0

Co jeśli użyjemy 'display: none;' zamiast 'visibility: hidden;'? W takim przypadku nie musimy ustawiać wysokości i szerokości. – Debiprasad

+0

Mam taki sam problem z 'display: none;' jeśli jednak ustawię wysokość i szerokość na 0, a następnie przełączam wyświetlanie, wykonaj '.focus()', a następnie '.print()', a następnie przełącz wyświetlić ponownie, działa dobrze. – gattsbr

0

Spróbuj document.parentWindow.print(); zamiast self.print() ...

2

nadrzędna dokumentu:

<!doctype html> 
<html> 
    <head> 
     <script> 
     function printIframe(iframe_id) { 

      if (navigator.appName.toUpperCase() == 'MICROSOFT INTERNET EXPLORER') { 
       document.frames[iframe_id].focus(); 
       document.frames[iframe_id].print(); 
      } else { 
       window.frames[iframe_id].focus(); 
       window.frames[iframe_id].print(); 
      } 
     } 
     </script> 
    </head> 
    <body> 
     <a href="javascript:printIframe('printMe');">Print the iframe.</a> 
     <iframe id="printMe" src="iframe.html"></iframe> 
    </body> 
</html> 

dokument iframe:

<!doctype html> 
<html> 
    <head></head> 
    <body> 
     <p>Print this.</p> 
    </body> 
</html> 

z poniższego linku: http://www.eggheadcafe.com/PrintSearchContent.asp?LINKID=449

+0

to działało dla mnie! dzięki. – Pons

+0

Podszywanie się nie jest tak 2013 – Codebeat

+0

Czy możesz podać główne idee odpowiedzi tutaj? Odpowiedzi dotyczące wyłącznie linku są odradzane. – Thomas

Powiązane problemy