Html Agility Pack弄乱了我的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);
}

这里将脚本的主体添加为注释节点( <!---->将被添加)。



Related

许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow