java呼叫JavaScript

心意亂發表於2018-09-18

獲得 JavaScript 指令碼引擎

ScriptEngineManager scriptEngineManager = new ScriptEngineManager();

ScriptEngine engine = scriptEngineManager.getEngineByName("javascript");

定義獲取變數

// 定義變數
engine.put("msg", "this is msg");

// 獲取變數
System.out.println(engine.get("msg"));

定義並執行方法

// 定義函式
engine.eval("function add (num1, num2) {return num1 + num2;}");

// engine 該類同樣實現了 Invocable 介面 : 轉型過去拿到 API
Invocable invocable = (Invocable) engine;

// 呼叫函式
Object invokeFunction = invocable.invokeFunction("add", new Object[] {10, 10});
System.out.println(invokeFunction);

執行本地 JavaScript 程式碼

URL resource = JavaScriptDemo.class.getClassLoader().getResource("JavaScriptDemo.js");

FileReader fileReader = new FileReader(resource.getPath());
engine.eval(fileReader);
fileReader.close();

外部 JavaScript 程式碼

/**
 * 被java呼叫的外部 JavaScript
 */
function demo() {
    var i = 110;
    var j = 110;
    console.log("this is a i + j : " + (i + j));
}

demo();

執行復雜的算數表示式

Object eval = engine.eval("10 * 10 + 10");
System.out.println(eval);


相關文章