从Java获取javascript函数的参数值?

时间:2018-05-23 11:34:48

标签: javascript java parsing evaluation expression-evaluation

对于我的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或类似的东西)。

关于如何实现这一目标的任何想法?

1 个答案:

答案 0 :(得分:0)

我的想法是添加一些javascript模拟库,如sinon并执行此javascript。 特别是看看fake XMLHttpRequest

Javascript代码会是这样的:

let sinon = require('sinon');
let xhr = sinon.useFakeXMLHttpRequest();
let requests = [];
xhr.onCreate = function (xhr) {
        requests.push(xhr);
    }
const url = "http://foo.bar?q=" + location.href
const method = "GET"
const isAjax = true

let xmlhttp = new XMLHttpRequest();
xmlhttp.open(method, url, isAjax);

console.log(requests[0].url)