Bagaimana untuk memanggil kaedah dalam js di java
// js 代碼
STRING_UTIL = {};
STRING_UTIL.isNotEmpty = function (str){
return "" != str;
}
// java 代碼
Reader scriptReaderB = new InputStreamReader(
new FileInputStream(
new File("F:\tech-study\js-comm\release\bundle.js")),"utf-8");
engine.eval(scriptReaderB);
// engine.eval(scriptReaderA);
if (engine instanceof Invocable)
{
// 調(diào)用JS方法
Invocable invocable = (Invocable)engine;
Object result = invocable.invokeFunction("STRING_UTIL.isNotEmpty", new Object[]{"hahaha"});
System.out.println(result.toString());
}
// 調(diào)用異常
java.lang.NoSuchMethodException: no such method: STRING_UTIL.isNotEmpty
at com.sun.script.javascript.RhinoScriptEngine.invoke(RhinoScriptEngine.java:286)
at com.sun.script.javascript.RhinoScriptEngine.invokeFunction(RhinoScriptEngine.java:258)
at AAAAAAA.main(AAAAAAA.java:29)
// 如果在添加一個全局函數(shù)
function isNotEmpty (str){
return STRING_UTIL.isNotEmpty(str);
}
Tukar kaedah panggilan kepada
Object result = invocable.invokeFunction("isNotEmpty", new Object[]{"hahaha"});
Beginilah ia berfungsi
歡迎選擇我的課程,讓我們一起見證您的進(jìn)步~~
Selepas pelaksanaan anda sendiri, anda boleh menggunakan dua kaedah untuk mencapainya:
Gunakan engine.eval
Hasil objek = engine.eval("STRING_UTIL.isNotEmpty('" + str + "')");
Gunakan kaedah invokeMethod untuk melaksanakan
Mula-mula dapatkan objek
Object thiz = engine.get("STRING_UTIL");
Seterusnya, panggil kaedah mengikut objek
Hasil objek = invocable.invokeMethod(thiz, "isNotEmpty", new Object[]{"hahaha"});
Memperkenalkan buku lain kepada semua orang: "Pemahaman Mendalam Java 7: Teknologi Teras dan Amalan Terbaik"
Bab kedua di sini sangat terperinci. Kalau nak pergi boleh tengok
ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine javaScript = manager.getEngineByName("JavaScript");
InputStream stream =
JS.class.getResourceAsStream("/js/test.js");
BufferedReader reader =
new BufferedReader(new InputStreamReader(stream));
javaScript.eval(reader);
invocable = (Invocable) javaScript;
invocable.invokeFunction("method");
invokeFunction kaedah penerangan Parameter pertama ialah nama kaedah, parameter berikut adalah semua parameter kaedah, dan nilai pulangan ialah objek.
Tidak
java ialah bahasa back-end, js ialah bahasa front-end dan kod js tidak boleh dilaraskan dalam java