WebView调用js方法获取返回值的完美解决方案
在Android项目中我们或多或少会涉及到与js交互的问题,这其中WebView是必须掌握的控件,今天主要说说我们通过WebView调用js方法,然后如何很好的获取返回值。这里我总结了三种方式,大家可根据需求选择。
一、Android版本在4.4及以上
mWebView.evaluateJavascript("javascript:jsMethod()", new ValueCallback<String>() {
@Override
public void onReceiveValue(String value) {
//value即为js返回值
}
});
如果你项目最低支持版本在4.4以上,那这种方式最简单最完美,否则会报以下警告:
Call requires API level 19 (current min is 14): android.webkit.WebView#evaluateJavascript
二、Android4.4以下版本
虽说现在4.4以下版本不多了,但是只要存在,我们就需要努力兼容。
第一步,利用WebView的loadUrl()方法,调用js的alert方法,
mWebView().loadUrl("javascript:alert(jsMethod())");
第二步,在alert回调中的message就是我们想要的返回值
mWebView.setWebChromeClient(
new WebChromeClient() {
@Override
public boolean onJsAlert(WebView view, String url, String message, final JsResult result) {
//message即为返回值
result.confirm();
return true;
}
);
返回值虽然拿到了,但是这种方法缺点挺多的:
1、不能忘记在回调中调用result.confirm,否则webview会出现奇怪的不可控现象,大家可以去掉试试;
2、onJsAlert方法要return true,表示我们自己处理alert,不需要js管啦;
3、js在alert方法中别return一个值回来,否则也会出现奇怪现象;
4、在华为Android版本8.0以上的某些机型中,会出现无法拦截js的alert,会直接将js的alert弹框弹出,很难受。。。
三、最稳妥的方法
这种方法需要和js协调好,双方配合完成:
1、我们同样利用WebView的loadUrl()方法,调用js普通方法
mWebView().loadUrl("javascript:jsMethod()");
2、给js注入一个方法,且加入参数,并和js开发人员约定,当我们调用其第一步中的jsMethod方法,他调用我们注入的方法,并将返回值传回
mWebView().addJavascriptInterface(this, "viewpager");
@JavascriptInterface
public void getResult(String str) {
//str 即为返回值
}
OK!搞定啦,到此你就可以开心的与js交互,并拿到他的返回值啦!希望我的总结可以帮助到你~
---------------------
作者:康小白Code
来源:CSDN
原文:https://blog.csdn.net/k_bb_666/article/details/86673983
版权声明:本文为博主原创文章,转载请附上博文链接!
最新文章
- Windows光标形状
- C# 获取 新浪微博登录之后的 完整的Cookie
- java 28 - 1 设计模式 之 面向对象思想设计原则和模版设计模式概述
- IOS- 02 零碎知识总结
- ACM 矩阵题目整理
- oracle中的常用语句
- ASP+Access UTF-8 网页乱码问题解决办法
- Linux I/O模型
- 爬虫遇到取到网页为reload的问题
- 微信上传图文消息invalid media_id hint,thumb_media_id怎么获取
- C# 数据结构 线性表(顺序表 链表 IList 数组)
- Android CursorAdapter
- shell写多行到文件中
- oracle表空间增长异常或表空间占用过高问题分析
- win10提示管理员已阻止你运行此应用,如何强制运行
- iOS12系统应用发送邮件中的附件
- layui 重加载
- Leetcode 949. 给定数字能组成的最大时间
- 修改JAVA代码,需要重启Tomcat的原因
- Dubbo的原理以及详细原理、配置
热门文章
- sql注入原理,利用与防护
- 【CPU】记录当前嵌入式设备CPU 比较最高CPU 并打印出来
- hibernate的详解
- js 正则表达式将 p标签替换 span标签
- spring-JDBC配置,使用,一些报错,mybatis原理,优化
- Java易混小知识——equals方法和==的区别
- pandas处理json脱坑(一)--JsonError: Expecting property name enclosed in double quotes
- DisplayModeProvider完成移动开发自动视图解析
- MySQL percona-toolkit工具详解
- Tpcc-mysql 结果解读