使用Java调用JS
import junit.framework.TestCase;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;
import javax.swing.JButton;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.stream.Collectors;
public class CallJs extends TestCase {
public void testConsoleLog() throws ScriptException {
ScriptEngine engine = new ScriptEngineManager().getEngineByExtension("js");
//此处会抛出异常,Java的script引擎并不包含console对象
engine.eval("console.log('hello world')");
}
public void testConsoleLog2() throws ScriptException {
ScriptEngine engine = new ScriptEngineManager().getEngineByExtension("js");
engine.put("console", System.out);
//此处会抛出异常,Java的script引擎并不包含console对象
engine.eval("console.println('hello world')");
}
public void testUseJsFunction() throws ScriptException {
ScriptEngine engine = new ScriptEngineManager().getEngineByExtension("js");
engine.eval("function add(x,y){return x+y}");
Object value = engine.eval("add(3,7)");
System.out.println(value.getClass() + " " + value);
}
/**
* 注意,这个内部类必须是public否则js编译器看不见
*/
public class SubWrapper {
public int sub(int x, int y) {
return x - y;
}
}
public void testUseJsFile() throws IOException, ScriptException {
ScriptEngine engine = new ScriptEngineManager().getEngineByExtension("js");
InputStream cin = getClass().getResourceAsStream("/calljs.js");
InputStreamReader reader = new InputStreamReader(cin);
engine.put("subWrapper", new SubWrapper());
engine.eval(reader);
engine.put("console", System.out);
System.out.println(engine.eval("add(3,4)"));
System.out.println(engine.eval("sub(5,6)"));
}
public void testUpdateJavaObject() throws ScriptException {
JButton button = new JButton();
ScriptEngine engine = new ScriptEngineManager().getEngineByExtension("js");
engine.put("button", button);
engine.eval("button.text='hello world'");
System.out.println(button.getText());
}
public void testlistAllScriptEngine() {
//列出全部脚本引擎
new ScriptEngineManager().getEngineFactories().forEach(fac -> {
System.out.println("name " + fac.getEngineName()
+ "\nlanguage " + fac.getLanguageName()
+ "\nversion " + fac.getEngineVersion()
+ "\nlanguageVersion " + fac.getLanguageVersion()
+ "\nextensions " + fac.getExtensions().stream().collect(Collectors.joining(","))
+ "\nmimetypes " + fac.getMimeTypes().stream().collect(Collectors.joining(","))
+ "\n"
);
});
}
}
js
function add(x, y) {
return x + y
}
function sub(x,y){
return subWrapper.sub(x,y)
}
使用Java调用JS的更多相关文章
- java调用js脚本
有些情况下,需要java去调用js,groovy等脚本语言,传入参数获取脚本运行的结果. js脚本例子: function add(a,b){ return a + b + number; } jav ...
- java调用js代码
jdk8里使用脚本引擎调用js 1.定义一个js方法: function getRouteInfo(province){ //注意,参数不要带var..在java里执行会报错.. if (provin ...
- java调用js脚本语言
在我们开发的过程中,可能有这么一种情况,在java中需要取调用js方法完成一些事情.那么什么时候可能出现这种情况呢.比如我们使用爬虫模拟登录别的网站,但有些网站前台使用js对密码进行了加密处理,那么就 ...
- java调用js函数
问题:js函数可能有多个,之间有相互调用关系,有jquery jar包 org.mozilla.javascript-1.7.2 js envjs-1.2.js java代码 import jav ...
- gwt中java与js的相互调用
1. java通过jsni调用内部js Button button = new Button("java调用内部jsni的js方法"); button.addClickHandle ...
- java与js交互,相互调用传参
随着前端技术的发展与H5的广泛使用,移动端采用native+h5的方式越来越多了,对于Android来说就涉及到java与js的交互,相互调用传参等.下面就来看一下java与js交互的简单demo. ...
- Android WebView加载本地html并实现Java与JS交互
最近做的一个项目中,用到自定义地图,将自定义地图转换成html页面,现在需要做的是如何将本地的html加载到android中,并可以实现交互. 相关讲解: 其实webview加载资源的速度并不慢,但是 ...
- Android与H5交互(java与js的交互)
一.理论概述 1.js调用java方法 直接调用WebView的该方法就可以添加接口了,不过先要启动交互 // 启用javascript mWebView.getSettings().setJavaS ...
- android webview js交互 第一节 (java和js交互)
转载请注明出处 挺帅的移动开发专栏 http://blog.csdn.net/wangtingshuai/article/details/8631835 在androi ...
随机推荐
- JavaScript-手机中访问页面判断
最近在做微信服务号开发,其中遇到一个问题是微信服务号查看的个人的消息,如果点击在浏览器中查看(iOS中是在Safari中打开)应该是跳转到登录页面,因为页面需要从后台获取,因为需要服务端判断,如果是存 ...
- NodeJS错误-throw er; // Unhandled 'error' event
第一眼看以为Express版本出现问题,因为本地已经存在另外一个运行的Node项目,端口重复,修改一下端口号即可,错误提示如下: events.js:85 throw er; // Unhandled ...
- 10 个非常有用的 SVG 动画的 JavaScript 库
SVG 通常可以用作跨分辨率视频.这意味着在一块高分屏幕上不会降低图片的锐度.此外,你甚至可以让SVG动起来,通过使用一些javascript类库.下面,我们分享一些javascript类库,这些类库 ...
- (转)unity3D 如何提取游戏资源 (反编译)+代码反编译
原帖:http://bbs.9ria.com/thread-401140-1-1.html 首先感谢 雨松MOMO 的一篇帖子 教我们怎么提取 .ipa 中的游戏资源.教我们初步的破解unity3d资 ...
- Android短信收到,语音播报
发送短信功能界面 /** * 发送短信Demo * * @description: * @author ldm * @date 2016-4-22 上午9:07:53 */ public class ...
- dubbo 提示No such extension Filter for filter/com.alibaba.dubbo.rpc.Filter
配置时 <dubbo:provider filter="DubboExceptionFilter"></dubbo:provider> DubboExcep ...
- CSS3提交意见输入框样式
做了个输入框样式,如图: CSS代码例如以下: #button { cursor:pointer; width:30%; margin:5px; padding:8px; border-radius: ...
- 编译安装openssl报错:POD document had syntax errors at /usr/bin/pod2man line 69. make: *** [install_docs]
错误如下: cms.pod around line 457: Expected text after =item, not a number cms.pod around line 461: Expe ...
- common.js 2017
String.IsNullOrEmpty = function (v) { return !(typeof (v) === "string" && v.length ...
- dynamic(2) – ExpandoObject的使用
一,ExpandoObject使用场合 在传递对象,但是又不想创建一个class或者struct的时候,ExpandoObject就是一个非常好的选择. 假如我们有一个SendMail的函数,功能是发 ...