HTML 자바 민첩성 팩 내 엉망으로

html-agility-pack javascript

문제

내 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);
}

여기서 스크립트의 본문이 주석 노드로 추가됩니다 ( <!----> 가 추가됩니다).



아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.