在编写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;
}
}
首先来看下javax.script的使用流程
一.创建ScriptEngine对象
ScriptEngineManager maneger = new ScriptEngineManager();
ScriptEngine engine = maneger.getEngineByName("JavaScript");
二.读取js文件
Reader scriptReader = new InputStreamReader(JsInServer.class.getResourceAsStream("js文件"));
三.解析js文件
engine.eval(scriptReader);
四.调用js方法
Object result = invocable.invokeFunction("js方法", js方法参数1, js方法参数2...);
从上面就可以看出,想要复用function,其实还得从js上下手,如下:
1.准备一个公共的A.js如下
//这是一个公共方法
function getApiInfo(){
console.log("这是重复的方法")
}
2.B.js调用A.js中的函数
//引入A.js 方式1
document.write(document.write("<script src='A.js'><\/script>"));
//引入A.js 方式2
var element= document.createElement("script");
element.setAttribute("type", "text/javascript");
element.setAttribute("src", "A.js");
document.body.appendChild(element);
//调用getApiInfo
function call(){
getApiInfo();
}
这样就可以实现getApiInfo()复用了