Wie kann ich in einer Firefox-Erweiterung eine HTML-Zeichenfolge in ein DOM-Objekt umwandeln?

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

  •  08-06-2019
  •  | 
  •  

Frage

Ich lade eine Webseite (Tag-Suppe-HTML) mit XMLHttpRequest herunter und möchte die Ausgabe in ein DOM-Objekt umwandeln, auf dem ich dann XPATH-Abfragen ausführen kann.Wie konvertiere ich einen String in ein DOM-Objekt?

Es scheint, dass die allgemeine Lösung darin besteht, einen versteckten Iframe zu erstellen und den Inhalt der Zeichenfolge darin abzulegen.Da war sprechen der Aktualisierung DOMParser um Text/HTML zu unterstützen, aber ab Firefox 3.0.1 erhalten Sie immer noch eine NS_ERROR_NOT_IMPLEMENTED wenn du es versuchst.

Gibt es außer der Verwendung des versteckten Iframe-Tricks eine andere Möglichkeit?Und wenn nicht, wie lässt sich der Iframe-Trick am besten anwenden, damit Ihr Code außerhalb des Kontexts aktuell geöffneter Tabs funktioniert (damit das Schließen von Tabs den Code nicht durcheinander bringt usw.)?

Das ist ein Beispiel dafür, warum ich nach einer anderen Lösung als dem Iframe-Hack suche, wenn ich schreiben muss alle Wenn dieser Code eine robuste Lösung hat, suche ich lieber weiter nach etwas anderem.

War es hilfreich?

Lösung

Ajaxian hatte tatsächlich eine Beitrag zum Einfügen/Abrufen von HTML aus einem Iframe Heute.Sie können wahrscheinlich das dort gepostete js-Snippet verwenden.

Was das Schließen eines Browsers/Tabs angeht, können Sie es an onbeforeunload anhängen (http://msdn.microsoft.com/en-us/library/ms536907(VS.85).aspx) Veranstaltung und tun Sie, was immer Sie tun müssen.

Andere Tipps

Versuche dies:

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;
    }
}

Beachten Sie die overrideMimeType Und AntwortXML.
Der readyState == 4 abgeschlossen'.

Versuchen Sie, ein Div zu erstellen

document.createElement( 'div' );

Und dann setzen Sie das Tag-Soup-HTML auf das innerHTML des div.Der Browser sollte das in XML verarbeiten, das Sie dann analysieren können.

Die Innerhtml -Eigenschaft nimmt eine Zeichenfolge an, die eine gültige Kombination von Text und Elementen angibt.Wenn die Innerhtml -Eigenschaft festgelegt ist, ersetzt die angegebene Zeichenfolge den vorhandenen Inhalt des Objekts vollständig.Wenn die Zeichenfolge HTML -Tags enthält, wird die Zeichenfolge analysiert und formatiert, wie sie in das Dokument aufgenommen wird.

Sie möchten eine Webseite als XML-Objekt mit Javascript herunterladen, möchten aber keine Webseite verwenden?Da Sie keine Kontrolle darüber haben, was der Benutzer tun wird (Tabs oder Fenster schließen oder so weiter), müssten Sie dies in einem OSX-Dashboard-Widget oder einer separaten Anwendung tun.Eine Firefox-Erweiterung würde auch funktionieren, es sei denn, Sie müssen befürchten, dass der Benutzer den Browser schließt.

Gibt es außer der Verwendung des versteckten Iframe-Tricks eine andere Möglichkeit?

Leider nein, jetzt nicht.Andernfalls würde der Mikrozusammenfassungscode, auf den Sie verweisen, ihn stattdessen verwenden.

Und wenn nicht, wie lässt sich der Iframe-Trick am besten anwenden, damit Ihr Code außerhalb des Kontexts aktuell geöffneter Tabs funktioniert (damit das Schließen von Tabs den Code nicht durcheinander bringt usw.)?

Der von Ihnen zitierte Code verwendet das aktuelle Browserfenster, sodass das Schließen von Tabs keine Auswirkungen auf die Analyse hat.Durch das Schließen dieses Browserfensters wird Ihr Ladevorgang abgebrochen, aber Sie können damit umgehen (z. B. erkennen, dass der Ladevorgang abgebrochen wurde, und ihn in einem anderen Fenster neu starten), und es kommt nicht sehr oft vor.

Sie benötigen ein DOM-Fenster, damit der Iframe ordnungsgemäß funktioniert. Daher gibt es derzeit keine saubere Lösung (falls Sie den Mozilla-Parser verwenden möchten).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top