Come posso trasformare una stringa di HTML in un oggetto DOM in un'estensione di Firefox?

StackOverflow https://stackoverflow.com/questions/3868

  •  08-06-2019
  •  | 
  •  

Domanda

Sto scaricando una pagina Web (tag soup HTML) con XMLHttpRequest e voglio prendere l'output e trasformarlo in un oggetto DOM su cui posso quindi eseguire query XPATH.Come posso convertire da una stringa in un oggetto DOM?

Sembra che la soluzione generale sia creare un iframe nascosto e inserirvi il contenuto della stringa.C'è stato parlare di aggiornamento DOMParser per supportare text/html ma a partire da Firefox 3.0.1 ottieni ancora un file NS_ERROR_NOT_IMPLEMENTED se provi.

Esiste qualche opzione oltre all'utilizzo del trucco iframe nascosto?E in caso contrario, qual è il modo migliore per eseguire il trucco iframe in modo che il codice funzioni al di fuori del contesto di qualsiasi scheda attualmente aperta (in modo che la chiusura delle schede non rovini il codice, ecc.)?

Questo è un esempio del motivo per cui sto cercando una soluzione diversa dall'hacking di iframe, se devo scrivere Tutto quel codice per avere una soluzione solida, allora preferirei continuare a cercare qualcos'altro.

È stato utile?

Soluzione

L'Ajaxian in realtà aveva una post sull'inserimento/recupero di HTML da un iframe Oggi.Probabilmente puoi usare lo snippet js che hanno pubblicato lì.

Per quanto riguarda la gestione della chiusura di un browser/scheda, è possibile allegare al file onbeforeunload (http://msdn.microsoft.com/en-us/library/ms536907(VS.85).aspx) evento e fai tutto ciò che devi fare.

Altri suggerimenti

Prova questo:

var request = new XMLHttpRequest();

request.overrideMimeType( 'text/xml' );
request.onreadystatechange = process;
request.open ( 'GET', url );
request.send( null );

function process() { 
    if ( request.readyState == 4 && request.status == 200 ) {
        var xml = request.responseXML;
    }
}

Notare il sovrascrivereMimeType E rispostaXML.
IL readyState == 4 è completato'.

Prova a creare un div

document.createElement( 'div' );

Quindi imposta il tag soup HTML sull'innerHTML del div.Il browser dovrebbe elaborarlo in XML, che quindi puoi analizzare.

La proprietà InnerHTML prende una stringa che specifica una combinazione valida di testo ed elementi.Quando è impostata la proprietà InnerHTML, la stringa data sostituisce completamente il contenuto esistente dell'oggetto.Se la stringa contiene tag HTML, la stringa viene analizzata e formattata in quanto viene inserita nel documento.

Quindi vuoi scaricare una pagina web come oggetto XML utilizzando JavaScript, ma non vuoi utilizzare una pagina web?Poiché non hai alcun controllo su ciò che farà l'utente (chiudere schede o finestre o quant'altro), dovresti farlo come un widget OSX Dashboard o un'applicazione separata.Funzionerebbe anche un'estensione per Firefox, a meno che non ci si debba preoccupare che l'utente chiuda il browser.

Esiste qualche opzione oltre all'utilizzo del trucco iframe nascosto?

Purtroppo no, non adesso.Altrimenti il ​​codice microsummary a cui punti lo utilizzerebbe invece.

E in caso contrario, qual è il modo migliore per eseguire il trucco iframe in modo che il codice funzioni al di fuori del contesto di qualsiasi scheda attualmente aperta (in modo che la chiusura delle schede non rovini il codice, ecc.)?

Il codice che hai citato utilizza la finestra recente del browser, quindi la chiusura delle schede non influirà sull'analisi.La chiusura della finestra del browser interromperà il caricamento, ma puoi gestirlo (rilevare che il caricamento è interrotto e riavviarlo in un'altra finestra, ad esempio) e non accade molto spesso.

Hai bisogno di una finestra DOM affinché l'iframe funzioni correttamente, quindi al momento non esiste una soluzione pulita (se sei interessato a utilizzare il parser di Mozilla).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top