webview与JavaScript之间的交互
据说WebView的强大之处就是能和JavaScript进行交互调用。
参考博客:http://droidyue.com/blog/2014/09/20/interaction-between-java-and-javascript-in-android/
java调用JavaScript
- 实例化webview,获得WebSettings。通过WebSettings设置可以和JavaScript交互。
myWebView = (WebView) findViewById(R.id.webview);
WebSettings webSettings = myWebView.getSettings();
// 使能使用JavaScript
webSettings.setJavaScriptEnabled(true); - 设置webview的 WebViewClient,重写onPageFinished方法。设置当网页加载完后去调用网页中JavaScript。
myWebView.setWebViewClient(new WebViewClient() { @Override
public void onPageFinished(WebView view, String url) {
//当page也加载完后
super.onPageFinished(view, url);
javaUseJavaScript(myWebView);
} });
myWebView.loadUrl("file:///android_asset/js_java_interaction.html"); - 实现第二步里自定义的javaUseJavaScript方法。
/**
* java调用js方法
*
* @param webView
*/
private void javaUseJavaScript(WebView webView) {
String call = "javascript:sayHello()"; // call = "javascript:alertMessage(\"" + "content" + "\")";
//
// call = "javascript:toastMessage(\"" + "content" + "\")";
//
// call = "javascript:sumToJava(1,2)";
webView.loadUrl(call);
}完成了上面的步骤,就能调用JavaScript中sayHello()方法。sayHello方法在哪呢??就在你myWebView.loadUrl("file:///android_asset/js_java_interaction.html");的html文件中
<html>
<script type="text/javascript">
function sayHello() {
alert("Hello")
} function alertMessage(message) {
alert(message)
} function toastMessage(message) {
window.control.toastMessage(message)
} function sumToJava(number1, number2){
window.control.onSumResult(number1 + number2)
}
</script>
Java-Javascript Interaction In Android
</html> 总结:的从上面的代码可以看出,java调js的代码中,java可以给js传递参数,但无法获得返回值。如果必须要返回值,只能反过来通过js调用java。也就是我们下面说的:
JavaScript调用Java
- 编写JavaScript代码去调用java中的方法。其实在java调用JavaScript的第三步的html中我们已经调用了。(绿色部分)
- 在java中编写代码,响应JavaScript的调用。
2.1给webview添加JavaScript接口类
myWebView.addJavascriptInterface(new JsInteration(), "control");
2.2编写JavaScript的接口类 JsInteration
/**
* 实现js调用java的具体代码
* @author cyq
*
*/
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(TAG, "onSumResult result=" + result);
}
}
- 总结:js调用java代码就是window.在addJavascriptInterface设置的第二个字符参数.在addJavascriptInterface这第一个参数类里的方法.(参数1,参数2.....).
- 注意:
1要调用WebView的addJavascriptInterface方法。在JavaScript的接口类中的方法前要加上@JavascriptInterface注解。
2html文件要放到Android项目的assets文件夹下:

3 调用JavaScript要在加载完网页之后,就是WebViewClient的onPageFinished方法中。
4 WebView的方法必须在主线程之中,至于为何就不知道了。原本我担心加载网页放在主线程中会导致ANR,其实不用担心这个问题,WebView内部应该做了处理了。
代码在WebViewActivity中。
4.4处理
前面说到java调用JavaScript只能传参数,无法得到返回值。如果需要返回值需要反过来JavaScript调用java代码,通过参数传递获得返回值。这在4.4以后有了改进。可以通过下面说的调用JavaScript的方法获得返回值。不过我个人认为还是用传递参数的方法比较好吧。版本兼容嘛。
- 在WebViewClient的onPageFinished方法中调用JavaScript
myWebView.setWebViewClient(new WebViewClient() { @Override
public void onPageFinished(WebView view, String url) {
//当page也加载完后
super.onPageFinished(view, url);
testEvaluateJavascript( myWebView);
} }); - 实现java代码
/**
* 调用JavaScript方法获得返回值
* @param myWebView2
*/
@SuppressLint("NewApi")
protected void testEvaluateJavascript(WebView myWebView2) {
myWebView.evaluateJavascript("getReturn(\""+"参数1"+"\")", new ValueCallback<String>() { @Override
public void onReceiveValue(String value) {
Log.i(TAG, "onReceiveValue value=" + value);
}
});
} - 在html中编写JavaScript代码(绿色部分)
<html>
<script type="text/javascript">
function sayHello() {
alert("Hello")
} function alertMessage(message) {
alert(message)
} function toastMessage(message) {
window.control.toastMessage(message)
} function sumToJava(number1, number2){
window.control.onSumResult(number1 + number2)
}
function getReturn(message) {
return 1;
}
</script>
Java-Javascript Interaction In Android
</html>运行代码,在Android的log中能够看到返回值1.
webview与JavaScript之间的交互的更多相关文章
- 在android中实现webview与javascript之间的交互(转)
参见“在android中实现webview与javascript之间的交互”
- 一处疑难杂症的术后总结:WebView和JavaScript之间的交互
近期在公司里參与了M3项目的开发,这个项目是使用HTML5开发的前端页面,在开发完成后,把项目地址写入Android.iOS的壳源代码里面,这样当应用被打开时候自己主动加载项目首页的URL.这样的做法 ...
- WebView之javascript与android交互基础加强
一.什么是js与android交互? 通俗一点就是使用js代码调用java代码,或者使用java代码调用js代码. 二.为什么要使用js与java代码交互? 1.可以做一些js网页做本身处理不了的事情 ...
- Android中webview跟JAVASCRIPT中的交互
在android的应用程序中,可以直接调用webview中的javascript代码,而webview中的javascript代码,也可以去调用ANDROID应用程序(也就是JAVA部分的代码).下面 ...
- Android中webview和js之间的交互(转)
http://www.cnblogs.com/leizhenzi/archive/2011/06/29/2093636.html 1.android中利用webview调用网页上的js代码. Andr ...
- Android WebView与JavaScript交互操作(Demo)
应用场景: 为了使Android移动项目能够在较短的时间内完成开发,同时降低技术人员开发的成本投入,往往会采用Hybrid APP的开发模式.相关Hybrid APP(混合型应用)参看:http:// ...
- Android混合开发之WebView与Javascript交互
前言: 最近公司的App为了加快开发效率选择了一部分功能采用H5开发,从目前市面的大部分App来讲,大致分成Native App.Web App.Hybrid App三种方式,个人觉得目前以Hybri ...
- Android中WebView的JavaScript代码和本地代码交互的三种方式
一.Android中WebView的漏洞分析最近在开发过程中遇到一个问题,就是WebView使用的时候,还是需要解决之前系统(4.2之前)导致的一个漏洞,虽然现在这个系统版本用户很少了,但是也不能忽视 ...
- Android总结之WebView与Javascript交互[转]
Android总结之WebView与Javascript交互 前言: 最近公司的App为了加快开发效率选择了一部分功能采用H5开发,从目前市面的大部分App来讲,大致分成Native App.We ...
随机推荐
- Tengine笔记3:Nginx的反向代理和健康状态检查
通常代理服务器只用于处理内部网络对Intenet的请求,客户端必须通过代理服务器把本来要发送到Web服务器上的请求通过代理服务器分发给Web服务器,Web服务器响应时再通过代理服务器把响应发给客户端: ...
- OC基础1:一些基本概念
"OC基础"这个分类的文章是我在自学Stephen G.Kochan的<Objective-C程序设计第6版>过程中的笔记. 1.关于类方法和实例方法: (1).类方法 ...
- STL map+vector+struct的使用示例
个人编写的小例子,没有注释,刚毕业时作为技术调研随手编写,仅供参考: #include<iostream> #include<map> #include<vector&g ...
- jQuery--checkbox全选/取消全选
用JavaScript使页面上的一组checkbox全选/取消全选,逻辑很简单,实现代码也没有太难的语法.但使用jQuery实现则更简单,代码也很简洁,精辟! jQuery版本:1.3.2 <h ...
- JQuery(一)——初步总结
JQuery其实早就看过相关的视频了,但是由于当时查的资料太少,理解的不够深刻,所以没有进行总结,这次回过头来又学习了,心里感觉理解了很多,因为BS的其它知识基本学习完了,而且有了一定程度的理解.相互 ...
- PCL点云库增加自定义数据类型
#include <pcl/filters/passthrough.h> #include <pcl/filters/impl/passthrough.hpp> // the ...
- MySql 环境配置
关键词 MySQL 5.6.17 phpmyadmin [下载MySQL] MySQL Community Server MySQL社区版免费 注:需要oracle账户登录下载 [安装MySQ ...
- putty修改编码
在窗口标题上点击右键,选择 Change Settings... 在打开的配置窗口左边选择 Appearance,在右边点 Font settings 里面的 Change 按钮,选择好中文字体,比如 ...
- bootstrap之noConflict的详解
翻开推特框架,不经发现,几乎所有的插件都会出现noConflict的写法来防止和其他的插件冲突!我们以button.js为例子,打开其源代码发现 如下: var old = $.fn.button $ ...
- Android 不通过USB数据线调试的方法
在开发Android应用时,通常情况下是通过USB数据线连接设备和计算机,但对于一些需要使用USB设备的应用,这种方法就碰到了麻烦,手机的USB接口已经和外接的USB设备连接,无法再连数据线,此时可以 ...