Html agility pack jouer avec mon javascript

html-agility-pack javascript

Question

J'utilise le pack d'agilité HTML pour générer du code JavaScript dans l'en-tête de mon document. Mais après avoir enregistré le document dans le système de fichiers, j'ai reconnu que la source javascript avait été modifiée. Je suppose que cela se produit car HAP tente de valider mon script. Est-il possible d'empêcher cela? Comme vous pouvez le voir ci-dessous, j'ai déjà essayé de définir différentes options.

Mon code utilisant 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");

Méthode d'extension pour ajouter la balise de script

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

Réponse acceptée

Mon hypothèse: lors de l'utilisation de scripts.InnerHtml AgilityPack tente d'analyser le contenu au format HTML. Donc, s'il y a des balises, elles seront converties en nœuds HTML.

Pour éviter cela, vous devez définir le contenu du <script> tant que texte. Malheureusement, la propriété HtmlNode.InnerText est en lecture seule, mais il existe une solution de contournement pour cela. Vous pouvez simplement ajouter un noeud texte (un noeud de commentaire sera préférable) à votre noeud <script> :

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

Ici, le corps de votre script sera ajouté en tant que nœud de commentaire ( <!-- et --> seront ajoutés).




Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi