Ich erstelle ein JSoup-Dokument, das zwei <script type="application/javascript">/* .. */</script>
-Elemente enthält.
Das Problem: Wenn ich .html()
oder .toString()
aufruft, wird JSoup mein JavaScript umgehen.
bekommt
%Vor% Ist es möglich, JSoup so zu konfigurieren, dass <script>
Elements beim Escaping ignoriert wird?
Dies ist (im Grunde), wie ich mein jsoup-Dokument erstelle.
%Vor% Meine aktuelle Problemumgehung besteht darin, einen Platzhalter durch String.replace
on .html()
zu ersetzen. Aber das ist ein bisschen hacky.
Die outerHtmlHead-Methode kann nicht mehr überschrieben werden.
Das ist was ich benutze:
%Vor%Sie können es nicht deaktivieren. Mit "kann nicht" meine ich nicht so leicht. Sie müßten den Knoten durchqueren / neu implementieren / überschreiben, was zu viel ist, denke ich. Sie können dies tun
%Vor%Aktualisieren
Zuerst müssen wir den Ort des Problems identifizieren.
TextNode.java
%Vor%Insbesondere ist das Problem hier
%Vor%Entitäten.java
%Vor% Ok, jetzt haben wir das Problem identifiziert, also was ist die Lösung. Nun, hier ist das Problem. Normalerweise würden Sie outerHtmlHead
überschreiben (was für jeden Knoten aufgerufen wird, wenn html()
oder toString()-calls outerHtml
oder outerHtml()
aufgerufen wird. Das Problem ist, dass diese Methode Paket privat , so dass es nicht sichtbar ist, um es außerhalb des Pakets zu überschreiben.
Eine einfache Möglichkeit wäre, den Quellcode von Jsoup herunterzuladen und Ihre benutzerdefinierte Klasse in dasselbe Paket aufzunehmen. Eine andere wäre, die Sichtbarkeit dieser beiden zu schützen.
%Vor% Das Projekt wird in jeder Klasse Kompilierungsfehler haben, die class Node
dahingehend erweitern, dass es nicht möglich ist, die Sichtbarkeit einer überschriebenen Methode zu verringern.
Ändere die Sichtbarkeit auch in protected
.
Danach können Sie eine neue Klasse implementieren, die die Klasse TextNode
erweitert. So etwas würde genügen, glaube ich
und Ihr Code muss sich entsprechend ändern
%Vor% Wenn Sie es so lassen, wird der Text durch TextNode
dargestellt. Sie müssen explizit angeben, dass der Text von Ihrer benutzerdefinierten Klasse dargestellt werden muss.
Natürlich könntest du tiefer gehen und eine neue Klasse erstellen, die die script
Teile auf generische Weise behandelt.
Tags und Links javascript java jsoup