내 HTML 문서의 머리 부분에 자바 스크립트를 출력하기 위해 Html Agility Pack을 사용하고 있습니다. 그러나 문서를 파일 시스템에 저장 한 후 자바 스크립트 소스가 수정되었음을 알았습니다. 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");
script 태그를 추가하기위한 확장 메소드
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);
}
여기서 스크립트의 본문이 주석 노드로 추가됩니다 ( <!--
및 -->
가 추가됩니다).