【发布时间】:2017-04-10 11:00:55
【问题描述】:
我想知道是否可以在 Java 中检测如果在浏览器中打开 HTML 文件是否会打开警报对话框。最好是无头的。例如,解析了一个具有以下内容的文件,它会返回 true。
<html><script>alert("hey")</script></html>
以下也将返回 true
<html><iframe src="javascript:alert(1)" onload="alert(2)"></iframe></html>
但下面的代码会返回 false,因为如果在浏览器中打开它不会打开警报对话框(因为没有任何代码在语法上是正确的,并且不在标签中的部分)。
<html><script>alert;,(123w)</script>alert(1)</html>
我已经想到了一种方法来解决这个问题,但它是有缺陷的。基本上,您会看到字符串alert(1) 是否在文件中,等等。
这样做的问题是,如果该代码不在脚本标签或使其执行的标签内,它就不起作用。它不起作用的一个示例是:以下将返回 true,即使它实际上不会打开弹出窗口 <html>alert(1)</html>。
顺便说一句,这不是 Android。感谢您的帮助!
【问题讨论】:
-
使用正则表达式检查
-
闻起来像停机问题。
-
@Novice 这几乎是 180⁰ 错误的方法。 not 使用正则表达式来解析 HTML,OP 已经提供了一个不起作用的示例。
-
@chrylis 请解释为什么 regexp 是一个不好的工具,当输入错误的 html 时它们会导致某种无限循环吗?我自己从来没有使用过正则表达式来完成这项任务,只是使用了库。所以我很好奇
-
@Novice HTML 不是常规语言。 Canonical answer.
标签: javascript java html parsing html-parsing