yihaisang 2021-02-20 09:55 采纳率: 100%
浏览 68
已结题

javax.script 中 js 函数如何 复用

在编写javax.script运行的js 时

(我只有权限写js 没有权限改java中的代码)

我在js中get某个http api  但是代码太多了

导致每一个js 就要写很多 代码

 

如何把能快速请求http api呢

(可以封装函数 复用吗)

 

 

 

  • 写回答

2条回答 默认 最新

  • UCanCoding 2021-02-20 14:47
    关注

    针对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;
    	}
    }
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 11月28日
  • 已采纳回答 11月20日