【发布时间】:2018-05-23 11:34:48
【问题描述】:
对于我的 Java 应用程序,我需要能够在给定一个 JavaScript 字符串的情况下确定传递给函数调用的实际参数。
例如,给定这个 JavaScript 字符串:
const url = "http://foo.bar?q=" + location.href
const method = "GET"
const isAjax = true
let xmlhttp = new XMLHttpRequest();
xmlhttp.open(method, url, isAjax);
我想评估这个 JavaScript 以获得这个:
xmlhttp.open("GET", "http://foo.bar?q=someurl", true);
现在我正在使用正则表达式来查找我感兴趣的 JavaScript 部分(在此示例中,它将是 XMLHttpRequest 对象的 open 方法),但我需要能够计算实际的传递给函数的参数值,如果它们不是从调用端硬编码的。
我一直在这里搜索,但我发现更多与实际执行 JavaScript 代码有关,而不是查看其表达式值(更像是评估它,获取 AST 或类似的东西)。
关于如何实现这一点的任何想法?
【问题讨论】:
-
在示例情况下不可能,因为除非您实际在客户端浏览器一侧运行此脚本,否则您不会知道
location.href的值。您可以尝试使用 Nashorn 引擎运行脚本,但我怀疑它会按照您的预期进行,因为要求非常模糊。 -
是的,这是真的。实际上,这些 JavaScript 文件来自实际网页,我从爬虫下载它们然后处理它们
-
在你的问题的这个定义中,你需要以一种非常具体的方式重写你下载的所有javascript,然后运行它来获取参数。不会有任何通用的解决方案可以做出好的 SO 答案。我假设您已经知道如何运行脚本引擎的无头浏览器,因为您正在抓取 JS。
标签: javascript java parsing evaluation expression-evaluation