Htmlのアジリティパックは、私のJavaScript

html-agility-pack javascript

質問

私は、ドキュメントの先頭にいくつかのjavascriptを出力するために、Html Agility Packを使用しています。しかし、ドキュメントをファイルシステムに保存した後、私は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");

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は合法ですか? はい、理由を学ぶ