Sto sviluppando la mia prima estensione per Firefox e per questo ho bisogno di ottenere il codice sorgente completo della pagina corrente. Come posso farlo con XUL?Estensioni di Firefox e XUL: ottieni il codice sorgente della pagina
risposta
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
Forse si può ottenere tramite DOM, utilizzando
fonte var = document.getElementsByTagName ("html");
a prendere la fonte usando DOMParser
getElementsByTagName (nota: elementi) –
È 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:
<<span class="start-tag">HTML</span>>
Così, dopo strip_tags() diventa:
<HTML>
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.
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
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
Oppure potresti semplicemente usare '.textContent' invece. –
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.
Anche questo sembra abbastanza completo. Cosa succede se l'XHTML è rotto a causa di qualche errore, però? – Franz
Il parser DOM avrà già risolto problemi di codice HTML, quindi il serializzatore non vedrà la fonte non funzionante. –
Probabilmente sarebbe male allora? La variabile 'document' ha anche la proprietà' textContent'? – Franz
La prima parte della risposta di Sagi, ma utilizzare invece document.getElementById('viewsource').textContent
.
Più in linea con la risposta di Lachlan, ma c'è una discussione degli interni qui che diventa abbastanza approfondita, andando nel codice Cpp.
http://www.mail-archive.com/[email protected]/msg05391.html
e quindi seguire le risposte in fondo.
- 1. Cos'è il corridore XUL e XUL?
- 2. Ottenere il codice sorgente della pagina con UIWebView
- 3. appendChild in un XUL Firefox addon break
- 4. Ottieni codice sorgente HTML come stringa
- 5. firefox add-ons sdk vs XUL
- 6. Ottieni AST da. Assemblaggio Net senza codice sorgente (codice IL)
- 7. Ottieni codice sorgente HTML dal browser CefSharp
- 8. Ottieni il titolo della pagina nel codice della pagina principale dietro
- 9. Python Web Crawler e codice sorgente "get" sorgente
- 10. Ottieni il valore variabile dal codice sottostante e utilizza il controllo della pagina aspx
- 11. Come ottengo il codice sorgente HTML dalla pagina?
- 12. Problemi di input di Firefox durante il ridimensionamento della pagina
- 13. php: Ottieni il codice sorgente html con cURL
- 14. Codice sorgente della messaggistica Android
- 15. Ottenere il codice sorgente di un iframe
- 16. Come modificare il codice sorgente senza rieseguire cfx e Firefox durante il debug di un componente aggiuntivo SDK?
- 17. Il caricamento della pagina si attiva due volte su Firefox
- 18. codice LaTeX + sorgente di importazione
- 19. Barra laterale di Firefox Ottieni URL scheda
- 20. Golang: proteggere il codice sorgente
- 21. Come codificare l'estensione firefox che esegue il codice javascript nel contesto della pagina come firebug fa
- 22. Come posso ottenere il codice sorgente della pagina tramite WebBrowser-Control (ActiveX InternetExplorer)?
- 23. Ottieni la selezione della pagina incluso HTML?
- 24. Ottieni intestazione della pagina esistente in angularjs
- 25. Strumenti di test XUL
- 26. Proteggere il codice sorgente al momento della consegna al client
- 27. Salvare il codice sorgente con la formattazione (evidenziazione della sintassi)
- 28. Differenza tra l'aggiornamento della pagina e il postback della pagina
- 29. Come trovare il codice sorgente della funzione nativa chiamata java
- 30. Come posso modificare il codice sorgente della tastiera os Android?
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
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 :-) –
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