2010-02-25 7 views

risposta

2

Sembra veramente non v'è alcun modo per ottenere "tutto il codice sorgente". È possibile utilizzare

document.documentElement.innerHTML 

per ottenere il innerHTML dell'elemento superiore (in genere html). Se si dispone di un messaggio di errore di PHP come

<h3>fatal error</h3> 
segfault 

<html> 
    <head> 
     <title>bla</title> 
     <script type="text/javascript"> 
      alert(document.documentElement.innerHTML); 
     </script> 
    </head> 
    <body> 
    </body> 
</html> 

l'innerHTML sarebbe

<head> 
<title>bla</title></head><body><h3>fatal error</h3> 
segfault  
     <script type="text/javascript"> 
      alert(document.documentElement.innerHTML); 
     </script></body> 

ma il messaggio di errore sarebbe ancora mantenere

edit: documentElement è descritto qui: https://developer.mozilla.org/en/DOM/document.documentElement

+0

Questo potrebbe essere quello che sto cercando. Tuttavia, non capisco il codice di esempio che hai postato. Il secondo blocco dovrebbe essere il testo stampato tramite 'alert' nel primo blocco? In tal caso, perché il messaggio di errore apparirà improvvisamente all'interno del tag 'body'? – Franz

+0

sì, il secondo blocco di codice era il codice in allerta. Questa è probabilmente la correzione del codice di Firefox. Basta copiare il primo blocco in un file html vuoto e provarlo :-) –

+0

Questa non è la fonte completa. Come hai notato, tutto ciò che non è compreso tra "" e "" non viene incluso. La risposta di Lachlan sembra essere una soluzione molto migliore. – MatrixFrog

1

Forse si può ottenere tramite DOM, utilizzando

fonte var = document.getElementsByTagName ("html");

a prendere la fonte usando DOMParser

https://developer.mozilla.org/En/DOMParser

+0

getElementsByTagName (nota: elementi) –

2

È possibile ottenere l'URL con var URL = document.location.href e passare a "view-source:"+URL.

Ora è possibile recuperare l'intero codice sorgente (viewsource è l'id del corpo):

var code = document.getElementById('viewsource').innerHTML; 

Il problema è che il codice sorgente è formattato. Quindi devi eseguire strip_tags() e htmlspecialchars_decode() per risolverlo.

Ad esempio, la linea 1 dovrebbe essere il doctype e la linea 2 dovrebbe essere simile:

&lt;<span class="start-tag">HTML</span>&gt; 

Così, dopo strip_tags() diventa:

&lt;HTML&gt; 

E dopo htmlspecialchars_decode() abbiamo finalmente otteniamo risultato previsto:

<HTML> 

Il codice non passa al parser DOM in modo da Puoi anche visualizzare un codice HTML non valido.

+0

Hmmm ... suona abbastanza bene. L'intero codice è racchiuso in un elemento con ID 'viewsource' o perché lo stai facendo in questo modo? E cosa intendi con "formattato"? Le entità sono fuggite? – Franz

+0

Pensalo come un normale codice HTML. L'id del corpo è viewsource. Ho aggiunto un esempio di come appare. Spero che tu abbia qualche idea su come andare in questa pagina (puoi farlo con iframe nascosti, per esempio). – Sagi

+0

Oppure potresti semplicemente usare '.textContent' invece. –

5

Per caricare il contenuto è necessario un oggetto xul browser.

Carica la versione "view-source:" della pagina in un oggetto browser, nello stesso modo del menu "Visualizza origine pagina". Vedere function viewSource() in chrome://global/content/viewSource.js. Quella funzione può caricare dalla cache, o no.

Una volta che il contenuto viene caricato, la fonte originale è data da:

var source = browser.contentDocument.getElementById('viewsource').textContent; 

serializzare un DOM Document
Questo metodo non sarà possibile ottenere la fonte originale, ma può essere utile per alcuni lettori.

È possibile serializzare l'oggetto documento su una stringa. Vedere Serializing DOM trees to strings nel MDC. Potrebbe essere necessario utilizzare il metodo alternativo di creazione di istanze nel proprio interno.

Questo articolo parla di documenti XML, ma funziona anche su qualsiasi DOMDocument HTML.

var serializer = new XMLSerializer(); 
var source = serializer.serializeToString(document); 

Questo funziona anche in una pagina Web o nella console di Firebug.

+0

Anche questo sembra abbastanza completo. Cosa succede se l'XHTML è rotto a causa di qualche errore, però? – Franz

+0

Il parser DOM avrà già risolto problemi di codice HTML, quindi il serializzatore non vedrà la fonte non funzionante. –

+0

Probabilmente sarebbe male allora? La variabile 'document' ha anche la proprietà' textContent'? – Franz

0

La prima parte della risposta di Sagi, ma utilizzare invece document.getElementById('viewsource').textContent.

Problemi correlati