检查 html 文件是否会打开 JavaScript 警报对话框
Check if html file would open JavaScript alert dialog
我想知道是否可以在 Java 中检测 HTML 文件在浏览器中打开时是否会打开警告对话框。最好是无头。例如,解析具有以下内容的文件,它将 return true.
<html><script>alert("hey")</script></html>
下面的 return 也为真
<html><iframe src="javascript:alert(1)" onload="alert(2)"></iframe></html>
但是下面的代码会 return 错误,因为如果它在浏览器中打开它不会打开警告对话框(因为代码的 none 在语法上是正确的,而那部分是'不在标签中)。
<html><script>alert;,(123w)</script>alert(1)</html>
我想到了解决这个问题的方法,但它有缺陷。基本上,您会看到 stringalert(1)
是否在文件中,等等。
这样做的问题是,如果该代码不在脚本标签或使其执行的标签内,它就无法工作。它不起作用的一个示例是:以下将 return 为真,即使它实际上不会打开弹出窗口 <html>alert(1)</html>
.
顺便说一句,这不是 Android。感谢您的帮助!
您不仅需要验证 Alert 函数是否存在,还需要检查 JavaScript 函数是否甚至 运行。这方面的一个例子是,如果在一个永远不会 运行s 的函数中有一个带有警报函数的脚本。警报功能会在那里,但它永远不会 运行。这会产生误报。因此,在最好的情况下,您应该以某种方式 运行 Java 脚本来验证代码并查看函数是否会 运行.
正如 Louis 在评论中指出的那样,在这种情况下,选项 2 更好,因为您需要考虑 DOM 和 Java 脚本的行为,因为如果 Alert 函数 运行s 以及如何 运行s.
选项 1:运行 Java带有脚本引擎的脚本
您可能需要某种方法将 HTML 与 Java 脚本分开,但是一旦有了这种方法,您就可以执行此方法。
您可以使用 ScriptEngine
运行 Java 中的 Java 脚本。 https://docs.oracle.com/javase/8/docs/technotes/guides/scripting/prog_guide/api.html
如果您阅读 API,有一种方法可以创建变量并在您的 Java 程序和 Java脚本之间进行通信,您正在 运行ning。
要捕获警报的上下文,您可以创建一个覆盖警报函数的自定义 Java脚本函数。在这个自定义函数中,您可以将函数的参数发送回您的 Java 程序。
选项 2:无头浏览器
您也可以尝试使用像 JBrowserDriver 这样的无头浏览器,您可以看到您有一个带有 getText 作为函数的警报界面。对于异步问题,无头浏览器有一个默认的等待脚本完成的时间。如果此默认数量不够,您可以使用 setScriptTimeout 来处理它。
http://machinepublishers.github.io/jBrowserDriver/
我想知道是否可以在 Java 中检测 HTML 文件在浏览器中打开时是否会打开警告对话框。最好是无头。例如,解析具有以下内容的文件,它将 return true.
<html><script>alert("hey")</script></html>
下面的 return 也为真
<html><iframe src="javascript:alert(1)" onload="alert(2)"></iframe></html>
但是下面的代码会 return 错误,因为如果它在浏览器中打开它不会打开警告对话框(因为代码的 none 在语法上是正确的,而那部分是'不在标签中)。
<html><script>alert;,(123w)</script>alert(1)</html>
我想到了解决这个问题的方法,但它有缺陷。基本上,您会看到 stringalert(1)
是否在文件中,等等。
这样做的问题是,如果该代码不在脚本标签或使其执行的标签内,它就无法工作。它不起作用的一个示例是:以下将 return 为真,即使它实际上不会打开弹出窗口 <html>alert(1)</html>
.
顺便说一句,这不是 Android。感谢您的帮助!
您不仅需要验证 Alert 函数是否存在,还需要检查 JavaScript 函数是否甚至 运行。这方面的一个例子是,如果在一个永远不会 运行s 的函数中有一个带有警报函数的脚本。警报功能会在那里,但它永远不会 运行。这会产生误报。因此,在最好的情况下,您应该以某种方式 运行 Java 脚本来验证代码并查看函数是否会 运行.
正如 Louis 在评论中指出的那样,在这种情况下,选项 2 更好,因为您需要考虑 DOM 和 Java 脚本的行为,因为如果 Alert 函数 运行s 以及如何 运行s.
选项 1:运行 Java带有脚本引擎的脚本
您可能需要某种方法将 HTML 与 Java 脚本分开,但是一旦有了这种方法,您就可以执行此方法。
您可以使用 ScriptEngine
运行 Java 中的 Java 脚本。 https://docs.oracle.com/javase/8/docs/technotes/guides/scripting/prog_guide/api.html
如果您阅读 API,有一种方法可以创建变量并在您的 Java 程序和 Java脚本之间进行通信,您正在 运行ning。
要捕获警报的上下文,您可以创建一个覆盖警报函数的自定义 Java脚本函数。在这个自定义函数中,您可以将函数的参数发送回您的 Java 程序。
选项 2:无头浏览器
您也可以尝试使用像 JBrowserDriver 这样的无头浏览器,您可以看到您有一个带有 getText 作为函数的警报界面。对于异步问题,无头浏览器有一个默认的等待脚本完成的时间。如果此默认数量不够,您可以使用 setScriptTimeout 来处理它。 http://machinepublishers.github.io/jBrowserDriver/