javax.script 中 js 函数如何 复用

在编写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()复用了