在编写javax.script运行的js 时
(我只有权限写js 没有权限改java中的代码)
我在js中get某个http api 但是代码太多了
导致每一个js 就要写很多 代码
如何把能快速请求http api呢
(可以封装函数 复用吗)
在编写javax.script运行的js 时
(我只有权限写js 没有权限改java中的代码)
我在js中get某个http api 但是代码太多了
导致每一个js 就要写很多 代码
如何把能快速请求http api呢
(可以封装函数 复用吗)
针对document无法使用的问题, 如下测试了一下,完美通过,不过需要后台改一下加载js的方法,改成多个js合并成一个字符串。
java 代码
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import javax.script.Invocable;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;
public class Test {
public static void main(String[] arg) throws IOException {
ScriptEngineManager maneger = new ScriptEngineManager();
ScriptEngine engine = maneger.getEngineByName("JavaScript");
String script = getScript("A.js","B.js");
System.out.println("完整js脚本:" + script);
if (engine != null) {
try {
// JS引擎解析文件
engine.eval(script);
if (engine instanceof Invocable) {
Invocable invocable = (Invocable) engine;
// JS引擎调用方法
Object result = invocable.invokeFunction("call");
System.out.println("返回值 : " + result);
}
} catch (ScriptException e) {
e.printStackTrace();
} catch (NoSuchMethodException e) {
e.printStackTrace();
}
}
}
public static String getScript(String... scripts) throws IOException {
StringBuffer buffer = new StringBuffer();
for (int i = 0; i < scripts.length; i++) {
BufferedReader bf = new BufferedReader(new InputStreamReader(Test.class.getResourceAsStream(scripts[i])));
String s = null;
while ((s = bf.readLine()) != null) {
buffer.append(s.trim());
}
bf.close();
}
String scriptstr = buffer.toString();
return scriptstr;
}
}