Android中Java和JavaScript交互 Android原生和html交互
2016-07-14 14:11
549 查看
1.WebView开启JavaScript脚本执行
2.WebView设置供JavaScript调用的交互接口。
3.客户端和网页端编写调用对方的代码。
java代码
htlm代码
js调用Java
调用格式为window.jsInterfaceName.methodName(parameterValues) 此例中我们使用的是android作为注入接口名称。
java调用js
webView调用js的基本格式为webView.loadUrl(“javascript:methodName(parameterValues)”)
这就实现了java与js之间的相互调用。
调用js有参数有返回值的函数
Android在4.4之前并没有提供直接调用js函数并获取值的方法,所以在此之前,常用的思路是 java调用js方法,js方法执行完毕,再次调用java代码将值返回。
Android 4.4之后使用evaluateJavascript即可。这里展示一个简单的交互示例 具有返回值的js方法
html代码
java代码
evaluateJavascript方法必须在UI线程(主线程)调用,因此onReceiveValue也执行在主线程。
WebSettings settings = webView.getSettings(); settings.setJavaScriptEnabled(true);
2.WebView设置供JavaScript调用的交互接口。
webView.addJavascriptInterface(new JsInteration(), "android");
3.客户端和网页端编写调用对方的代码。
java代码
public class JsInteration { @JavascriptInterface public void toastMessage(String message) { Toast.makeText(getApplicationContext(), message, Toast.LENGTH_LONG).show(); } @JavascriptInterface public void onSumResult(int result) { Log.i(LOGTAG, "onSumResult result=" + result); } }
htlm代码
<html> <script type="text/javascript"> function toastMessage(message) { window.control.toastMessage(message) } function sumToJava(number1, number2){ window.control.onSumResult(number1 + number2) } </script> Java-Javascript Interaction In Android </html>
js调用Java
调用格式为window.jsInterfaceName.methodName(parameterValues) 此例中我们使用的是android作为注入接口名称。
function toastMessage(message) { window.control.toastMessage(message) } function sumToJava(number1, number2){ window.control.onSumResult(number1 + number2) }
java调用js
webView调用js的基本格式为webView.loadUrl(“javascript:methodName(parameterValues)”)
webView.loadUrl("javascript:sumToJava(1,2)");
这就实现了java与js之间的相互调用。
调用js有参数有返回值的函数
Android在4.4之前并没有提供直接调用js函数并获取值的方法,所以在此之前,常用的思路是 java调用js方法,js方法执行完毕,再次调用java代码将值返回。
Android 4.4之后使用evaluateJavascript即可。这里展示一个简单的交互示例 具有返回值的js方法
html代码
function getGreetings() { return 1; }
java代码
private void testEvaluateJavascript(WebView webView) { webView.evaluateJavascript("getGreetings()", new ValueCallback<String>() { @Override public void onReceiveValue(String value) { Log.i(LOGTAG, "onReceiveValue value=" + value); }}); }
evaluateJavascript方法必须在UI线程(主线程)调用,因此onReceiveValue也执行在主线程。
相关文章推荐
- JQuery1——基础($对象,选择器,对象转换)
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager