Come posso stampare un IFrame da javascript in Safari / Chrome

Qualcuno può aiutarmi con la stampa del contenuto di un IFrame tramite una chiamata javascript in Safari / Chrome.

Questo funziona in Firefox:

$('#' + id)[0].focus(); $('#' + id)[0].contentWindow.print(); 

questo funziona in IE:

 window.frames[id].focus(); window.frames[id].print(); 

Ma non riesco a far funzionare nulla in Safari / Chrome.

Grazie

Andrea

Metti una funzione di stampa nell’iframe e chiamala dal genitore.

iframe:

 function printMe() { window.print() } 

genitore:

 document.frame1.printMe() 

ecco la mia soluzione completa, cross browser:

nella pagina iframe:

 function printPage() { print(); } 

nella pagina principale

 function printIframe(id) { var iframe = document.frames ? document.frames[id] : document.getElementById(id); var ifWin = iframe.contentWindow || iframe; iframe.focus(); ifWin.printPage(); return false; } 

Aggiornamento : Molte persone sembrano avere problemi con questo nelle versioni di IE rilasciate dal momento che ho avuto questo problema. Non ho tempo per-reinvestigare in questo momento, se sei bloccato ti suggerisco di leggere tutti i commenti in questo thread intero!

Ho usato lo script di Andrew ma ho aggiunto un pezzo prima che venga chiamata la funzione printPage (). L’iframe necessita di focus, altrimenti stamperà comunque il frame principale in IE.

 function printIframe(id) { var iframe = document.frames ? document.frames[id] : document.getElementById(id); var ifWin = iframe.contentWindow || iframe; iframe.focus(); ifWin.printPage(); return false; } 

Non ringraziarmi però, è stato Andrew a scriverlo. Ho appena fatto un tweak = P

Oltre alle soluzioni di Andrew e Max, l’utilizzo di iframe.focus () ha prodotto la stampa di frame padre invece di stampare solo iframe figlio in IE8. Cambiando quella linea lo aggiustò:

 function printIframe(id) { var iframe = document.frames ? document.frames[id] : document.getElementById(id); var ifWin = iframe.contentWindow || iframe; ifWin.focus(); ifWin.printPage(); return false; } 

Usa firefox window.frames ma aggiungi anche la proprietà name perché usa l’iframe in firefox

IE:

 window.frames[id] 

Firefox:

 window.frames[name]   

Una cosa da notare è che se stai testando questo localmente usando il file: ///, non funzionerà su Chrome poiché la funzione nell’iframe verrà visualizzata come non definita. Tuttavia una volta su un server web funzionerà.

Ho dovuto apportare alcune modifiche per farcela con IE8 (non ho provato con altri sapori di IE)

1) document.frames [param] sembra accettare un numero, non un ID

 printIframe(0, 'print'); function printIframe(num, id) { var iframe = document.frames ? document.frames[num] : document.getElementById(id); var ifWin = iframe.contentWindow || iframe; ifWin.focus(); ifWin.printPage(); return false; } 

2) Avevo una finestra di dialogo di stampa visualizzata al caricamento della pagina e c’era anche un link a “Clicca qui per iniziare a stampare” (se non si avvia automaticamente). Per farlo funzionare dovevo aggiungere la chiamata a focus ()

  

Puoi usare

 parent.frames['id'].print(); 

Lavora su Chrome!

Puoi anche usare

 top.iframeName.print(); 

o

 parent.iframeName.print(); 

Il ‘framePartsList.contentWindow.print ();’ non funzionava in IE 11 ver11.0.43

Quindi ho usato framePartsList.contentWindow.document.execCommand (‘print’, false, null);

Usa questo:

 window.onload = setTimeout("window.print()", 1000);