2012-02-27 57 views
3

我正在使用Html敏捷包在我的文檔的頭部輸出一些JavaScript。但在將文檔保存到文件系統後,我發現javascript源已被修改。我想這是因爲HAP試圖驗證我的腳本。是否有可能防止這種情況發生?正如你可以看到下面我已經嘗試設置不同的選項。Html敏捷包搞我的javascript

我使用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); 
    } 
} 

回答

8

我的假設:使用scripts.InnerHtml AgilityPack當試圖解析內容爲HTML。因此,如果有標籤,它們將被轉換爲HTML節點。

爲避免出現這種情況,您應該將<script>的內容設置爲文本。不幸的是,HtmlNode.InnerText屬性是隻讀的,但有一個解決方法。你可以只添加文本(註釋節點會preferrable)節點到您的<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); 
} 

這裏腳本的遺體將被添加爲註釋節點(<!---->將被添加)。

+2

給別人的提示:如果你想添加腳本標籤而沒有html註釋,你可以執行下面的scripts.AppendChild(htmlDoc.CreateTextNode(content)); – jp36 2012-04-02 16:06:25