Html Agility Pack jugando con mi javascript

html-agility-pack javascript

Pregunta

Estoy usando el Html Agility Pack para generar algunos javascript en la parte superior de mi documento. Pero después de guardar el documento en el sistema de archivos, reconocí que se había modificado la fuente javascript. Supongo que esto sucede porque HAP está tratando de validar mi script. ¿Es posible prevenir esto? Como se puede ver a continuación, ya he intentado configurar diferentes opciones.

Mi código utilizando 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étodo de extensión para agregar la etiqueta 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);
    }
}

Respuesta aceptada

Mi suposición: cuando se usan scripts.InnerHtml AgilityPack intenta analizar el contenido como HTML. Así que si hay etiquetas allí se convertirán a nodos HTML.

Para evitar esto, debe configurar el contenido del <script> como texto. Desafortunadamente, la propiedad HtmlNode.InnerText es de solo lectura, pero hay una solución para esto. Puede simplemente agregar un nodo de texto (un nodo de comentario será preferible) a su nodo <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);
}

Aquí se agregará el cuerpo de su script como un nodo de comentario (se agregarán <!-- y --> ).



Related

Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué