Android WebView 调用JS方法获取返回值
一、Android4.4+
如果你项目的minSdkVersion 为4.4 以上,那么你可以直接通过WebView的evaluateJavascript()方法 拿到JS方法的返回值
webview.evaluateJavascript("javascript:JSMethod()", new ValueCallback<String>() {@Overridepublic void onReceiveValue(String value) {//此处为 js 返回的结果}});
}
二、Android4.4 以下
minSdkVersion 在4.4以下,那么你就不得不做适配除了以上方法可以调用JS方法,还有一种传统的方法也可以调,那就是通过WebView的loadUrl()。但是该方法不直接返回JS方法的返回值,我们可以使用一些小技巧间接的获取该JS方法的返回值。例如,我们通常是这么调用一个JS的 方法
webView.setWebViewClient(new WebViewClient() {@Overridepublic void onPageFinished(WebView view, String url) {super.onPageFinished(view, url);webView.loadUrl("javascript:JSMethod('" + userId + "')");}
});
但该JS方法没有添加回调原生的函数时,我们是获取不到该方法的返回值
那么我们就得换一种方式,直接调用JS的alert方法将JS方法的返回值提示给我们,alert出来的message就是我们要获取的返回值。
将上面调用JS方法的地方改一下:
webView.loadUrl("javascript:alert(JSMethod('" + userId + "'))");
拿到JSAlert返回的消息并处理提示框
webview.setWebChromeClient(new WebChromeClient() {@Overridepublic boolean onJsAlert(WebView view, String url, String message, final JsResult result) {Logger.e(message);result.confirm();return true;}
);
这样既能调用到JS方法,也能拿到该JS 方法的返回值,当然如果你加载的这个H5 页面有其他的alert也是会在这里回调的,至于怎么处理就见仁见智了,例如你可以给个flag啊…
注意事项:
1.加载完H5 之后再调用JS方法,所以你的JS方法可以写在onPageFinished里面,而且要在父类方法后面执行。
2.自行处理alert回调时,要执行result.confirm();或JSResult的其他方法告诉H5我处理完了,return true表示我们拦截了系统的alert提示。
Android WebView 调用JS方法获取返回值相关推荐
- android 调用js怎么获取返回值_js 函数
函数是一个特殊的对象 具名函数 function 函数名(形式参数1,形式参数2){ 语句 return 返回值 } 匿名函数 上门的具名函数,去掉函数名就是匿名函数 let a =function( ...
- oracle java存储过程返回值_java程序调用Oracle 存储过程 获取返回值(无返回,非结果集,结果集)...
java程序调用Oracle 存储过程 获取返回值(无返回,非结 果集,结果集) oracle中procedure是不能有返回值的,要想返回值,就得有 输出参数,同样要想返回记录集,可以把游标类型作为 ...
- controller调用另一个controller中的方法 获取返回值_必须掌握!你知道 Spring 中运用的 9 种设计模式吗 ?...
Spring中涉及的设计模式总结,在面试中也会经常问道 Spring 中设计模式的问题.本文以实现方式.实质.实现原理的结构简单介绍 Sping 中应用的 9 种设计模型,具体详细的刨析会在后面的文章 ...
- android webview调js方法,Android中WebView与H5的交互,Native与JS方法互调
项目中经常用到WebView与H5的交互,一个是H5调本地方法,一个是本地调H5方法,在此记录一下. 首先,启用JS支持 //启用js支持 webSettings.setJavaScriptEnabl ...
- c++ 调用python2类获取返回值
vs2017好像没有 PyObject* PyIns = PyInstance_New(pyCls, NULL, NULL); // 创建tester类 前面介绍了用python调用C++时用swig ...
- [Python陷阱]os.system调用shell脚本获取返回值
当前有shell个脚本/tmp/test.sh,内容如下: #!/bin/bash exit 11 使用Python的os.system调用,获取返回值是: >>> ret=os.s ...
- python获取返回值_python 调用 shell ,获取返回值和返回信息
网络上有各种方案解决python调用shell的解决方案,但是没有一个完美的,以下是本人整理的一个方案,比较完美地解决了同时解决获取返回值和返回信息. def run_linux_cmd_quiet( ...
- android 连续调用js方法,Android的WebView中的JavascriptInterface:对JS的多次调用会导致死锁...
这是我用过的整个Java代码.我将在下面更详细地解释... public class Test7 extends Activity { //debug private final static Str ...
- android webView注入js方法
需要在页面加载完成之后才能注入自定义js方法 webView.setWebViewClient(new WebViewClient() {@Overridepublic boolean shouldO ...
最新文章
- uplay服务器未响应,《看门狗:军团》存在崩溃丢失存档BUG 育碧正在修复
- Python函数中参数前带*是什么意思?
- leetcode 滑动窗口小结 (一)
- (数据库系统概论|王珊)第三章关系数据库标准语言SQL-第四节:数据查询
- thinkphp-无限分类下根据任意部门获取顶级部门ID
- STM32工作笔记0075---UCOSIII任务管理(下)
- 程序员到项目经理:从内而外的提升(比较全面的介绍)
- 临时修改 macOS 应用的界面语言
- 如何一键查看你的QQ/绑定了多少应用?
- SecureCRT和SecureFX的下载和安装2022
- 阵列卡u盘安装系统步骤_Dell的R720服务器使用U盘安装系统
- c语言根据日期求星期蔡勒公式,利用蔡勒公式获得给定日期的星期数
- 调查问卷的JSON模板设计与分数计算的Java实现
- 普度大学计算机科学博士,普渡大学计算机系 Yongle Zhang课题组招收全奖博士生...
- Java实现生成并下载Excel文件
- 微信小程序:音乐项目
- Html中img src=/图片路径的使用方式
- 个性化推荐系统设计(3.1)——如何评价个性化推荐系统的效果
- 基于Arduino实现简单人体红外感应灯(人体红外传感器+LED)
- RT5350使用uboot从U盘启动linux成功