Html敏捷包与我的javascript混为一谈

Html敏捷包与我的javascript混为一谈,javascript,html-agility-pack,Javascript,Html Agility Pack,我正在使用Html敏捷包在文档的头部输出一些javascript。但是在将文档保存到文件系统后,我发现javascript源代码已经被修改。我猜这是因为HAP试图验证我的脚本。有可能防止这种情况吗?正如你在下面看到的,我已经尝试过设置不同的选项 我使用HAP的代码: var htmlDoc = new HtmlDocument(); htmlDoc.OptionCheckSyntax = false; htmlDoc.OptionAutoCloseOnEnd = false; htmlDoc.O

我正在使用Html敏捷包在文档的头部输出一些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节点

为了避免这种情况,您应该将
的内容设置为文本。不幸的是,
HtmlNode.InnerText
属性是只读的,但是有一个解决方法。您只需在
节点中添加一个文本(注释节点更可取):

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

此处,脚本主体将作为注释节点添加(
将被添加)。

给其他人的提示:如果要添加脚本标记而不包含html注释,可以执行以下
scripts.AppendChild(htmlDoc.CreateTextNode(content))