Html Agility Pack che fa casino con il mio javascript

html-agility-pack javascript

Domanda

Sto usando l'Html Agility Pack per l'output di alcuni javascript in testa al mio documento. Ma dopo aver salvato il documento nel file system ho riconosciuto che la sorgente javascript è stata modificata. Immagino che questo accada perché HAP sta provando a convalidare il mio script. È possibile prevenire questo? Come puoi vedere qui sotto ho già provato a impostare diverse opzioni.

Il mio codice usando 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");

Metodo di estensione per l'aggiunta del tag script

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

Risposta accettata

La mia ipotesi: quando si usano gli scripts.InnerHtml InnerHtml AgilityPack tenta di analizzare il contenuto come HTML. Quindi se ci sono tag, verranno convertiti in nodi HTML.

Per evitare ciò dovresti impostare il contenuto dello <script> come testo. Sfortunatamente, la proprietà HtmlNode.InnerText è di sola lettura ma esiste una soluzione alternativa per questo. Puoi semplicemente aggiungere un nodo di testo (un nodo di commento sarà preferibile) al tuo 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);
}

Qui il corpo del tuo script verrà aggiunto come nodo di commento (saranno aggiunti <!-- e --> ).




Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché
Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché