Android WebView与JS交互及消息处理
来源:互联网 发布:java 返回数组给前台 编辑:程序博客网 时间:2024/05/29 12:54
一、WebView与JS交互
1.JS调用本地方法
这个功能的实现还是比较容易的。直接调用WebView的该方法就可以添加接口了,不过先要启动交互
1
2
3
4
// 启用javascript
mWebView.getSettings().setJavaScriptEnabled(
true
);
// 添加接口
public
void
addJavascriptInterface (Object object, String name)
Object是JS调用本地的类的对象,name是对象的别名,在JS可以用这个别名+点语法+方法名就可以调用本地的方法。例如:
1
2
3
4
5
WebView mWebView;
// ...
mWebview.addJavascriptInterface(
this
,
"myjs"
);
再定义一个JS可以调用的方法:
1
2
3
public
void
jsFunction(String string) {
System.out.println(
"js调用了这个方法:"
+ string);
}
注意:该方法不可以定义成私有的,不然JS就不能调用
2.本地调用JS方法
这个就更容易了- -,直接用以下方法就行了,假设JS上有一个方法叫androidFunction()
1
mWebview.loadUrl(
"javascript:androidFunction()"
);
二、消息处理
1、遇到Uncaught ReferenceError:...错误
出现该错误不会崩溃,它的意思是本地方法调用JS时没有找到调用的方法。万一我们调用的方法不存在,需要做相应的处理怎么办?Shamoo尝试try ... catch ...抓取一下异常,发现什么都没有抓到...后来仔细看了一下错误Log的TAG,是Web Console。Shamoo想肯定有办法抓取这个异常的,于是看了一下官方文档,终于发现了这么一个方法:
1
2
3
4
5
6
7
8
9
10
mWebview.setWebChromeClient(
new
WebChromeClient() {
@Override
public
boolean
onConsoleMessage(ConsoleMessage consoleMessage) {
// TODO Auto-generated method stub
if
(consoleMessage.message().contains(
"Uncaught ReferenceError"
)) {
// do something...
}
return
super
.onConsoleMessage(consoleMessage);
}
});
2.获取JS方法的返回值
仔细观察会发现WebView的loadUrl方法是没有返回值的,那要是想要获取JS方法的返回值就该怎么做呢?Shamoo查了一些资料,发现网上也没有很好的解决办法,后来只能通过回调的方法来实现返回,虽然很不灵活,不过也没有办法...
在loadUrl调用JS的一个方法,然后JS执行方法的时候,再调用Android本地的一个方法,并把返回值作为参数传递下来。
0 1
- Android WebView与JS交互及消息处理
- Android WebView与JS交互及消息处理
- Android Webview优化及与Js交互
- Android WebView与JS交互
- Android webview与js交互
- Android WebView与Js交互
- Android WebView与js交互
- Android webview与js交互
- Android webview 与js交互
- android webview与js交互
- Android webview与js交互
- android webview与js交互
- Android WebView与js交互
- android webView与js交互
- android之WebView及与js的交互
- android面试热点:webview使用及与js数据交互
- WebView---android webview组件如何使用 Webview与js交互
- WebView---android webview组件如何使用 Webview与js交互
- QT 界面几点总结
- 垃圾收集器
- OKHttp源码分析(三)之ResponseBody
- 登录界面(Android studio)
- tensorflow的contrib的基本用法和自定义模型
- Android WebView与JS交互及消息处理
- 两种网络模式简单实现Netcat
- Tomcat Core与Deployer版本有什么区别的相关推荐
- 利用set对list进行合并去重复
- NoSQL introduction
- css3 box-sizing属性
- 设计模式Builder模式——java设计模式——建造者模式
- 机器学习入门之基本软件安装
- leetcode 111-二叉树最小深度