如何使用html敏捷包注释掉html文档中的所有脚本标签

本文关键字:html 文档 标签 脚本 注释 何使用 包注释 | 更新日期: 2023-09-27 18:01:30

我想从一个HtmlDocument注释掉所有的脚本标签。这样,当我渲染文档时,脚本不会被执行,但我们仍然可以看到那里有什么。不幸的是,我目前的方法失败了:

foreach (var scriptTag in htmlDocument.DocumentNode.SelectNodes("//script"))
            {
                var commentedScript = new HtmlNode(HtmlNodeType.Comment, htmlDocument, 0) { InnerHtml = scriptTag.ToString() };
                scriptTag.ParentNode.AppendChild(commentedScript);
                scriptTag.Remove();
            }

请注意,我可以使用html上的替换函数来做到这一点,但我认为它不会那么健壮:

domHtml = domHtml.Replace("<script", "<!-- <script");
domHtml = domHtml.Replace("</script>", "</script> -->");

如何使用html敏捷包注释掉html文档中的所有脚本标签

试试这个:

foreach (var scriptTag in htmlDocument.DocumentNode.SelectNodes("//script"))
        {
            var commentedScript = HtmlTextNode.CreateNode(string.Format("<!--{0}-->", scriptTag.OuterHtml));
            scriptTag.ParentNode.ReplaceChild(commentedScript, scriptTag);
        }

参考这个SO post -非常干净的解决方案,利用HTML敏捷包的Linq查询支持:htmllagilitypack -删除脚本和样式?