2010-07-15 11 views
8

Il mio sito ha un pulsante "stampa questa pagina".Safari: impedisce due finestre di dialogo di stampa quando si stampa un Iframe

Carico un file HTML modello di stampa statica in un iframe nascosto, copia il codice HTML in quella pagina utilizzando jQuery e chiama window.print() dalla pagina Iframe. Tutto va bene, tranne su Safari, che vuole stampare anche il frame principale, così ho due finestre di stampa aperte.

Ho provato a chiamare window.print dall'iframe e a chiamarlo dal genitore, scegliendo l'iframe (document.printFrame.window.print()) ma ottengo due finestre di dialogo.

Qualcuno sa un modo per aggirare questo? Voglio solo stampare l'Iframe, non il genitore.

risposta

1

Non riesco a riprodurre il bug; funziona bene per me (cioè: ottengo solo una finestra di dialogo Stampa), indipendentemente dal fatto che la chiamo dall'iframe o dal frame principale. Forse stai chiamando window.print() due volte da qualche parte?

Sono in esecuzione Safari 4.0.3 su Mac OS X 10.6

EDIT: Eccolo: http://jsfiddle.net/Kq9dc/

EDIT 2: Ho appena testato questo su Safari 5.0/Windows 7 e sta funzionando correttamente. Sei sicuro che non sia qualcos'altro nel tuo codice?

EDIT 3: appena testato questo su diverse versioni di Safari su WinXP:

Safari 3.0 (first beta): Not working (no print dialog) 
Safari 3.1 (first non-beta): Works fine 
Safari 4.0: Works fine 
Safari 5.0: Works fine 
+0

Se mi stavano chiamando due volte di stampa, mi sarei aspettato lo stesso comportamento su altri browser. Hmmm ... –

+0

@Diodeus stai ottenendo 2 finestre di dialogo di stampa con il mio [fiddle] (http://jsfiddle.net/Kq9dc/)? – quantumSoup

+0

@Diodeus Altri test, sembrano funzionare bene – quantumSoup

0

Prova questa. Mettete questo in detta iframe:

function printPage() { print(); } 

poi nel genitore:

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

Nel caso questo non funziona nemmeno, mi piacerebbe provare aprendo una nuova finestra/scheda, e riempirlo con il codice HTML stampabile .

var printwin = window.open("about:blank", "_new"); 
printwin.document.open(); 
printwin.document.write("HTML goes here..javascript which is going to print is in there too.."); 
printwin.document.close(); 

Due cose minori a cui prestare attenzione sono

  • dividere </script> nella nuova finestra, in modo da non terminare prematuramente
  • uso setTimeout() per eseguire dopo onLoad() ha terminato , altrimenti gli utenti di Firefox possono vedere una pagina vuota sotto la finestra di
Problemi correlati