使用 dom 上下文在 Java JVM 中执行 JS
Posted
技术标签:
【中文标题】使用 dom 上下文在 Java JVM 中执行 JS【英文标题】:Executing JS in Java JVM with dom context 【发布时间】:2020-01-27 18:37:00 【问题描述】:我目前正在做我的小项目,但遇到了一个小(或大)困难。
我正在编写一个 Java 程序,该程序可以在网站上提取并运行一些 javascript 代码。我正在使用 ScriptEngineManager 在 JVM 中运行 JavaSript 代码,但是像 document.getInnerhtml().getElementById()
这样的代码由于无法访问 dom 上下文而无法工作。
有什么方法可以运行它吗?
【问题讨论】:
请尝试提供minimal reproducible example 以帮助我们了解您的问题 【参考方案1】:所以,这里是一个例子
<!DOCTYPE HTML>
<html lang="en-US">
<head>
<meta charset="UTF-8" />
<script type="text/javascript">
var a = document.getElementById('k');
</script>
</head>
<body>
<div style="display:none;visibility:hidden;" id="k">+((!+[]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+[])+(!+[]+!![]+!![])+(!+[]+!![]+!![]+!![]+!![]+!![]+!![]+!![])+(+[])+(!+[]+!![]+!![]+!![])+(+!![])+(!+[]+!![]+!![]+!![]+!![]+!![])+(!+[]+!![]+!![]+!![])+(!+[]+!![]+!![]+!![]+!![]+!![]+!![]))/+((!+[]+!![]+!![]+!![]+[])+(!+[]+!![]+!![]+!![])+(!+[]+!![]+!![]+!![]+!![]+!![])+(!+[]+!![]+!![]+!![]+!![]+!![])+(+!![])+(!+[]+!![]+!![]+!![])+(!+[]+!![])+(!+[]+!![]+!![]+!![]+!![]+!![]+!![]+!![])+(!+[]+!![]))</div>
</body>
</html>
所以,我的 java 程序将尝试运行那个“document.getElementById('k')”代码,但他不会看到那个 HTML div 在哪里,所以会抛出一个未定义的文档。
因此,在 Java 中是 ScriptEngineManager,它可以让您评估 Javascript 代码,但它无法访问 html 文档,因此它不适用于像这样的代码。
【讨论】:
以上是关于使用 dom 上下文在 Java JVM 中执行 JS的主要内容,如果未能解决你的问题,请参考以下文章