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

用於添加腳本標記的擴展方法

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

一般承認的答案

我的假設:使用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
這個KB合法嗎? 是的,了解原因
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因