Html Agility Pack mit meinem Javascript zu tun

html-agility-pack javascript

Frage

Ich verwende das Html Agility Pack, um etwas Javascript im Kopf meines Dokuments auszugeben. Aber nachdem ich das Dokument im Dateisystem gespeichert hatte, erkannte ich, dass die JavaScript-Quelle geändert wurde. Ich schätze, das passiert, weil HAP versucht, mein Skript zu validieren. Kann das verhindert werden? Wie Sie unten sehen können, habe ich bereits versucht verschiedene Optionen einzustellen.

Mein Code mit HAP:

var htmlDoc = new HtmlDocument();
htmlDoc.OptionCheckSyntax = false;
htmlDoc.OptionAutoCloseOnEnd = false;
htmlDoc.OptionFixNestedTags = false;
htmlDoc.LoadHtml(htmlContent);

HtmlNode headNode = htmlDoc.DocumentNode.SelectSingleNode("//head");
headNode.AddScriptNode(htmlDoc, "../../Scripts/jquery-1.7.1.min.js");

Erweiterungsmethode zum Hinzufügen des Skript-Tags

public static void AddScriptNode(this HtmlNode headNode, HtmlDocument htmlDoc, string filePath)
{
    string content = "";

    using (StreamReader rdr = File.OpenText(filePath))
    {
        content = rdr.ReadToEnd();
    }
    if(headNode != null)
    {
        HtmlNode scripts = htmlDoc.CreateElement("script");
        scripts.Attributes.Add("type", "text/javascript");
        scripts.InnerHtml = "\n" + content + "\n";
        headNode.AppendChild(scripts);
    }
}

Akzeptierte Antwort

Meine Annahme: Bei der Verwendung scripts.InnerHtml scripts.InnerHtml versucht AgilityPack, den Inhalt als HTML zu analysieren. Wenn dort also Tags vorhanden sind, werden sie in HTML-Knoten konvertiert.

Um dies zu vermeiden, sollten Sie den Inhalt des <script> als Text festlegen. Leider ist die HtmlNode.InnerText Eigenschaft schreibgeschützt, aber es gibt eine Problemumgehung dafür. Sie könnten einfach einen Text (ein Kommentarknoten wird bevorzugt) Knoten zu Ihrem <script> Knoten hinzufügen:

if(headNode != null)
{
    HtmlNode scripts = htmlDoc.CreateElement("script");
    scripts.Attributes.Add("type", "text/javascript");
    scripts.AppendChild(htmlDoc.CreateComment("\n" + content + "\n"));
    headNode.AppendChild(scripts);
}

Hier wird der Rumpf Ihres Skripts als Kommentarknoten hinzugefügt ( <!-- und --> wird hinzugefügt).



Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum
Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum