Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/391.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何删除<;脚本>;使用C#从HTML页面添加标记? if(window.self==window.top){$.getScript(“Wing.js”);}_Javascript_C#_Html - Fatal编程技术网

Javascript 如何删除<;脚本>;使用C#从HTML页面添加标记? if(window.self==window.top){$.getScript(“Wing.js”);}

Javascript 如何删除<;脚本>;使用C#从HTML页面添加标记? if(window.self==window.top){$.getScript(“Wing.js”);},javascript,c#,html,Javascript,C#,Html,在C#中是否有方法修改上述HTML文件并将其转换为此格式: 基本上,我的目标是从HTML页面中删除所有JavaScript。我不知道修改HTML文件的最佳方式是什么。我希望以编程方式进行此操作,因为有数百个文件需要修改。可能值得一看: 编辑:特定工作代码 HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument(); string sampleHtml = "<html>" +

在C#中是否有方法修改上述HTML文件并将其转换为此格式:


基本上,我的目标是从HTML页面中删除所有JavaScript。我不知道修改HTML文件的最佳方式是什么。我希望以编程方式进行此操作,因为有数百个文件需要修改。

可能值得一看:

编辑:特定工作代码

HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
string sampleHtml = 
    "<html>" +
        "<head>" + 
                "<script type=\"text/javascript\" src=\"jquery.js\"></script>" +
                "<script type=\"text/javascript\">" + 
                    "if (window.self === window.top) { $.getScript(\"Wing.js\"); }" +
                "</script>" +
        "</head>" +
    "</html>";
MemoryStream ms = new MemoryStream(Encoding.ASCII.GetBytes(sampleHtml));

doc.Load(ms);

List<HtmlNode> nodes = new List<HtmlNode>(doc.DocumentNode.Descendants("head"));
int childNodeCount = nodes[0].ChildNodes.Count;
for (int i = 0; i < childNodeCount; i++)
    nodes[0].ChildNodes.Remove(0);
Console.WriteLine(doc.DocumentNode.OuterHtml);
HtmlAgilityPack.HtmlDocument doc=新的HtmlAgilityPack.HtmlDocument();
字符串示例HTML=
"" +
"" + 
"" +
"" + 
“如果(window.self==window.top){$.getScript(\'Wing.js\”);}”+
"" +
"" +
"";
MemoryStream ms=新的MemoryStream(Encoding.ASCII.GetBytes(sampleHtml));
文件加载(毫秒);
列表节点=新列表(doc.DocumentNode.subjects(“head”);
int childNodeCount=节点[0]。ChildNodes.Count;
for(int i=0;i
可以使用正则表达式:

Regex rRemScript = new Regex(@"<script[^>]*>[\s\S]*?</script>");
output = rRemScript.Replace(input, "");
string result = Regex.Replace(
    input, 
    @"</?(?i:script|embed|object|frameset|frame|iframe|meta|link|style)(.|\n|\s)*?>", 
    string.Empty, 
    RegexOptions.Singleline | RegexOptions.IgnoreCase
);
Regex-rRemScript=new Regex(@“]*>[\s\s]*?”;
输出=rRemScript.Replace(输入“”);

我认为正如其他人所说,HtmlAgility pack是最好的途径。我用它刮去了一大堆难以弯曲的箱子。但是,如果您的目标是一个简单的正则表达式,那么您可以尝试使用正则表达式:

Regex rRemScript = new Regex(@"<script[^>]*>[\s\S]*?</script>");
output = rRemScript.Replace(input, "");
string result = Regex.Replace(
    input, 
    @"</?(?i:script|embed|object|frameset|frame|iframe|meta|link|style)(.|\n|\s)*?>", 
    string.Empty, 
    RegexOptions.Singleline | RegexOptions.IgnoreCase
);
string result=Regex.Replace(
输入,
@"", 
字符串。空,
RegexOptions.Singleline | RegexOptions.IgnoreCase
);

这似乎是一个奇怪的解决方案

如果您不想使用任何第三方库来执行此操作,也不需要实际删除脚本代码,只需将其禁用即可,您可以执行以下操作:

html = Regex.Replace(html , @"<script[^>]*>", "<!--");
html = Regex.Replace(html , @"<\/script>", "-->");
html=Regex.Replace(html,@“]*>”,“”);

这将从脚本标记中创建HTML注释。

:D有什么问题?如果存在嵌套脚本标记的可能性,则可以使用Replace while Matches.Count>0。这适用于上面给出的示例。我同意这不是最好的方法,应该使用HTML敏捷包。但它是有效的。感谢所有回答说明这与asdf不匹配(开头标记中没有空格),因此不会删除没有声明类型的脚本。还有,@Jerry,为什么要在标记中匹配
[\s\s]*
(即任何空格和任何非空格),而不是
*
?值得通读一下,以了解一个工作脚本有多少种格式,我同意,但也许你的回答可以更具体一点?如果脚本标记不在头中怎么办?只需将对后代的调用(“头”)替换为它从何而来的标记即可。“html”将工作,如果它位于外部头部我相信-!该示例不删除脚本标记,而是删除头中的所有元素。-!MemoryStream不是必需的<代码>doc.LoadHtml(sampleHtml)Smihit,要非常小心我在回答中提到的边缘情况(如果你幸运的话,你不会遇到),在这种情况下,你在一个i.e.
var s=''中嵌入了一个。这会带来痛苦,所以看看agility pack选项,或者至少是我的
建议,我尝试了这个,它删除了脚本标记,以及HTML中的所有其他标记。(我只剩下一个空白字符串)