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
版权声明:本文为博主原创文章,转载请附上博文链接!
WebView调用js方法获取返回值的完美解决方案的更多相关文章
- [Python陷阱]os.system调用shell脚本获取返回值
当前有shell个脚本/tmp/test.sh,内容如下: #!/bin/bashexit 11 使用Python的os.system调用,获取返回值是: >>> ret=os.sy ...
- oc 通过webView调用js方法
- (void)viewDidLoad { [super viewDidLoad]; //加载本地web页面 web = [[UIWebView alloc]init]; web.background ...
- JS模态窗口返回值兼容问题解决方案
因系统要兼容原IE已使用的关闭方法,经调试测得,需对window.dialogArguments进行再较验,不然易出问题. function OKEnd(vals) { if (vals == nul ...
- 标签中的onclick调用js方法传递多个参数的解决方案
1.JS方法 <script type="text/javascript"> funcation cc(parameter1,parameter2,parameter3 ...
- Struct2_使用Ajax调用Action方法并返回值
一.Login.jsp 1.<head>引入jquery: <script type="text/javascript" src="http://aja ...
- 7 -- Spring的基本用法 -- 10... 获取其他Bean的属性值;获取Field值;获取任意方法的返回值
7.10 高级依赖关系配置 组件与组件之间的耦合,采用依赖注入管理:但基本类型的成员变量值,应直接在代码中设置. Spring支持将任意方法的返回值.类或对象的Field值.其他Bean的getter ...
- 工作随笔——Java调用Groovy类的方法、传递参数和获取返回值
接触Groovy也快一年了,一直在尝试怎么将Groovy引用到日常工作中来.最近在做一个功能的时候,花了点时间重新看了下Java怎么调用Groovy的方法.传递参数和获取返回值. 示例Groovy代码 ...
- 服务器文档下载zip格式 SQL Server SQL分页查询 C#过滤html标签 EF 延时加载与死锁 在JS方法中返回多个值的三种方法(转载) IEnumerable,ICollection,IList接口问题 不吹不擂,你想要的Python面试都在这里了【315+道题】 基于mvc三层架构和ajax技术实现最简单的文件上传 事件管理
服务器文档下载zip格式 刚好这次项目中遇到了这个东西,就来弄一下,挺简单的,但是前台调用的时候弄错了,浪费了大半天的时间,本人也是菜鸟一枚.开始吧.(MVC的) @using Rattan.Co ...
- Selenium2学习-036-WebUI自动化实战实例-034-JavaScript 在 Selenium 自动化中的应用实例之六(获取 JS 执行结果返回值)
Selenium 获取 JavaScript 返回值非常简单,只需要在 js 脚本中将需要返回的数据 return 就可以,然后通过方法返回 js 的执行结果,方法源码如下所示: /** * Get ...
随机推荐
- XSS学习收集
XSS platform supporting HTTPShttps://www.w0ai1uo.org/xss/xss.php?do=loginhttps://x.secbox.cn/index.p ...
- 用js刷剑指offer(旋转数组的最小数字)
题目描述 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转. 输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素. 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个 ...
- 搭建配置私服-nexus ,Maven中的使用——3
1. 下载nexus包,将bin目录添加到PATH路径下去 2. 修改: bin/jsw/conf 下面的wrapper.conf文件: 修改java命令绝对路径 修改之后: 3. 进入 ...
- CF662C Binary Table (FWT板题)
复习了一发FWT,发现还挺简单的... 没时间写了,就放一个博客吧:Great_Influence 的博客 注意这一句ans[i]=∑j⊗k=if[j]∗dp[k]ans[i]= ∑_{j⊗k=i} ...
- Longest Common Subsequence (DP)
Given two strings, find the longest common subsequence (LCS). Your code should return the length of ...
- mapbox展示动态图标
mapbox-gl通过为marker设置css动画,实现动态闪烁效果,先放个效果图 . 1.主要就是为元素设置一个动画, myfirst动画让元素随时间放大 .marker { /* backgrou ...
- Docker:18.x版本安装与卸载
Docker CE 分为 stable, test, 和 nightly 三个更新频道.每六个月发布一个 stable 版本 初始化机器 #1.关闭警报 vi /etc/inputrc #然后将set ...
- std::array,std::vector,基于范围的for循环
std::array除了有传统数组支持随机访问.效率高.存储大小固定等特点外,还支持迭代器访问.获取容量.获得原始指针等高级功能.而且它还不会退化成指针T *给开发人员造成困惑. for( 元素名变量 ...
- mouseup([[data],fn])
mouseup([[data],fn]) 概述 当在元素上放松鼠标按钮时,会发生 mouseup 事件. 与 click 事件不同,mouseup 事件仅需要放松按钮.当鼠标指针位于元素上方时,放松鼠 ...
- SharePoint學習
1.SharePoint 2010 Products -> SharePoint 2010 Products Configuration Wizard 配置好后,系統會自動在localho ...