对于我的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或类似的东西)。
关于如何实现这一目标的任何想法?
答案 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)