2009-08-11 12 views
8

Questa soluzione funziona bene in Firefox 3.0+, ma IE8/7 sta semplicemente stampando l'intera pagina, non l'iframe specifico.Stampa di un iFrame nascosto in IE

Questa è la funzione che viene chiamata quando il collegamento di stampa viene cliccato:

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; 
} 

L'aspx che viene caricato in iframe nascosto chiama la funzione di stampa sul gestore di eventi onLoad:

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

La funzione di stampa:

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

ho provato anche questo con "finestra" al posto di "se stesso". Entrambe le soluzioni funzionano bene in FF, ma IE non sembra avere la mira giusta. qualche idea? Una soluzione cross-browser sarebbe fantastica! Inoltre, preferirei usare gli stili di stampa CSS, ma il contenuto che sto stampando è diverso da quello sulla pagina, da qui la necessità di caricare html in un iframe nascosto.

+1

È per una stampante segreta che nessuno conosce? (scusa, non ho potuto resistere :)) – KristoferA

risposta

20

Soluzione: In IE, un iframe con visibilità: nascosto; fa in modo che il browser stampi il genitore. Modifica degli stili in altezza: 0px; larghezza: 0 px; corregge questo problema.

+0

E se usassimo 'display: none;' invece di 'visibility: hidden;'? In questo caso non è necessario impostare l'altezza e la larghezza. – Debiprasad

+0

Ho lo stesso problema con 'display: none;' tuttavia se si imposta l'altezza e la larghezza su 0, e quindi si alterna la visualizzazione, si faccia il '.focus()' seguito da '.print()', quindi si attiva visualizzare di nuovo, funziona bene. – gattsbr

0

Provare document.parentWindow.print(); invece di self.print() ...

2
Parent

documento:

<!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> 

documento iframe:

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

dal link sottostante: http://www.eggheadcafe.com/PrintSearchContent.asp?LINKID=449

+0

questo ha funzionato per me! Grazie. – Pons

+0

Lo spoofing non è così 2013 – Codebeat

+0

Puoi includere le idee principali della risposta qui? Link solo le risposte sono scoraggiate. – Thomas

Problemi correlati