Html Agility Pack messing с моим javascript

html-agility-pack javascript

Вопрос

Я использую Html Agility Pack для вывода некоторого javascript в начало моего документа. Но после сохранения документа в файловой системе я узнал, что источник javascript был изменен. Я предполагаю, что это происходит потому, что HAP пытается проверить мой скрипт. Можно ли это предотвратить? Как вы можете видеть ниже, я уже пробовал устанавливать разные параметры.

Мой код с использованием 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");

Метод расширения для добавления тега скрипта

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

Принятый ответ

Мое предположение: при использовании scripts.InnerHtml AgilityPack пытается анализировать содержимое как HTML. Поэтому, если есть теги, они будут преобразованы в узлы HTML.

Чтобы этого избежать, вы должны установить содержимое <script> как текст. К сожалению, свойство HtmlNode.InnerText для чтения, но для этого есть обходной путь. Вы можете просто добавить в узел <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);
}

Здесь тело вашего скрипта будет добавлено как узел комментария (будет добавлен <!-- и --> ).



Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему
Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему