使用 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的主要内容,如果未能解决你的问题,请参考以下文章

JVM安全点

jvm-运行时数据区域(《深入理解java虚拟机》)

jvm

JVM内存结构阐述

java JVM-线程上下类加载器

java JVM-线程上下类加载器图