java通过j2v8调用js方法
java通过scriptManager和j2v8分别调用js方法
·
之前在文章 🔗java执行appleScript脚本 中提到可以通过 scriptManager 调用 javascript 方法,其实调用 js 文件中定义好的方法也是可以的。譬如定义个 test.js 文件并放到项目的 resource 目录下:
function sum(a, b)
{
return a + b;
}
scriptManager 完整代码如下:
public static void main(String[] args) throws IOException, NoSuchMethodException
{
URL url = Test.class.getClassLoader().getResource("test.js");
System.out.println("-------script engine-------");
ScriptEngineManager engineManager = new ScriptEngineManager();
ScriptEngine engine = engineManager.getEngineByName("javascript");
try {
FileReader reader = new FileReader(url.getPath());
engine.eval(reader);
Invocable jsInvoke = (Invocable) engine;
Object res = jsInvoke.invokeFunction("sum", new Object[]{5, 4});
System.out.println("res: " + res);
} catch (ScriptException e) {
System.out.println("exception: " + e.getMessage());
}
}
运行后在控制台就能看到相应结果了,实际上还可以通过 j2v8 来调用 javascript 方法。j2v8 是一组用于 Google 的流行 javascript 引擎 v8 的 java 绑定,目的是为了能在 android 端高效地执行 javascript,因为 android 端是不支持 scriptManage 的。此外移动应用框架 tabris.js 也是基于 j2v8 开发的。可以在 🔗github链接 查看更多。
实现代码如下:
public static void main(String[] args) throws IOException
{
URL url = Test.class.getClassLoader().getResource("test.js");
System.out.println("-------j2v8-------");
V8 runtime = V8.createV8Runtime();
runtime.executeScript(readFileAsString(url.getPath()));
Object v8Res = runtime.executeJSFunction("sum", new Object[]{3, 4});
System.out.println("v8 res: " + v8Res);
runtime.release();
}
这里调用了一个自定义的 readFileAsString() 方法,实现如下:
public static String readFileAsString(String filePath) throws java.io.IOException
{
StringBuffer fileData = new StringBuffer();
BufferedReader reader = new BufferedReader(new FileReader(filePath));
char[] buf = new char[1024];
int numRead = 0;
while ((numRead = reader.read(buf)) != -1) {
String readData = String.valueOf(buf, 0, numRead);
fileData.append(readData);
buf = new char[1024];
}
reader.close();
return fileData.toString();
}
运行后控制台也就打印出对应结果啦!以上,欢迎交流~
更多推荐
所有评论(0)