2010-01-28 3 views
10

Devo essere in grado di copiare la pagina Web corrente in una nuova finestra popup per un'anteprima di stampa. C'è una griglia sulla pagina con i bambini, quindi se espandono una delle file per vedere le righe figlio, ho bisogno di mostrarlo nella nuova finestra.Copia la pagina Web corrente in una nuova finestra

È possibile?

Attualmente ho la finestra popup aperta sulla stessa pagina, ma tutte le righe non sono state espanse.

risposta

8

Forse questo è il trucco (in IE e Firefox, non in Opera. Non so su WebKit):

var yourDOCTYPE = "<!DOCTYPE html..."; // your doctype declaration 
var printPreview = window.open('about:blank', 'print_preview'); 
var printDocument = printPreview.document; 
printDocument.open(); 
printDocument.write(yourDOCTYPE+ 
      "<html>"+ 
       document.documentElement.innerHTML+ 
      "</html>"); 
printDocument.close(); 

(notare la differenza tra window.open() e document.open()!)

Tuttavia, si perderanno tutti thingies DOM personalizzati, come i gestori di eventi e così via. Tuttavia, potrebbe funzionare se si desidera copiare e incollare il codice HTML.

+0

Ho provato questo (con jQuery) ... ma poiché l'espansione delle righe viene eseguita in modo asincrono, la nuova pagina non sta rilevando l'html. – Martin

+1

Ho creato un JSFiddle, che funziona almeno in Firefox: http://jsfiddle.net/boldewyn/bbPLp/ – Boldewyn

0

Codifica lo stato di righe aperte/chiuse in un formato stringa di query (come "open = row1 + row5 + row10") e passa questa stringa in un url a una finestra appena aperta (come "host.com/blah. html? aperto = row1 + row5 + row10"). Nella pagina di destinazione, nella funzione onload, esaminare l'oggetto posizione ed espandere nuovamente queste righe.

0

È inoltre possibile utilizzare JavaScript per accedere alla finestra popup e chiamare funzioni come "hideRow (x)". Aggiungerò un esempio migliore quando arrivo a casa (iPod touch non è divertente digitare il codice)

0

Ti stai solo nascondendo/mostrando le righe con display: none ;? Come stai caricando la pagina popup? Se si sta ricaricando nuovamente la pagina, è possibile utilizzare AJAX per passare un set di dati alla pagina di destinazione.

Assegnare un ID univoco a ciascuna riga e per ogni riga espansa, aggiungere l'ID della riga in un array. Passa l'array o l'oggetto come membro dati tramite AJAX quando viene chiamata la funzione di anteprima di stampa, quindi espandi le righe applicabili nella funzione di callback in caso di caricamento della pagina.