一、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方法获取返回值相关推荐

  1. android 调用js怎么获取返回值_js 函数

    函数是一个特殊的对象 具名函数 function 函数名(形式参数1,形式参数2){ 语句 return 返回值 } 匿名函数 上门的具名函数,去掉函数名就是匿名函数 let a =function( ...

  2. oracle java存储过程返回值_java程序调用Oracle 存储过程 获取返回值(无返回,非结果集,结果集)...

    java程序调用Oracle 存储过程 获取返回值(无返回,非结 果集,结果集) oracle中procedure是不能有返回值的,要想返回值,就得有 输出参数,同样要想返回记录集,可以把游标类型作为 ...

  3. controller调用另一个controller中的方法 获取返回值_必须掌握!你知道 Spring 中运用的 9 种设计模式吗 ?...

    Spring中涉及的设计模式总结,在面试中也会经常问道 Spring 中设计模式的问题.本文以实现方式.实质.实现原理的结构简单介绍 Sping 中应用的 9 种设计模型,具体详细的刨析会在后面的文章 ...

  4. android webview调js方法,Android中WebView与H5的交互,Native与JS方法互调

    项目中经常用到WebView与H5的交互,一个是H5调本地方法,一个是本地调H5方法,在此记录一下. 首先,启用JS支持 //启用js支持 webSettings.setJavaScriptEnabl ...

  5. c++ 调用python2类获取返回值

    vs2017好像没有 PyObject* PyIns = PyInstance_New(pyCls, NULL, NULL); // 创建tester类 前面介绍了用python调用C++时用swig ...

  6. [Python陷阱]os.system调用shell脚本获取返回值

    当前有shell个脚本/tmp/test.sh,内容如下: #!/bin/bash exit 11 使用Python的os.system调用,获取返回值是: >>> ret=os.s ...

  7. python获取返回值_python 调用 shell ,获取返回值和返回信息

    网络上有各种方案解决python调用shell的解决方案,但是没有一个完美的,以下是本人整理的一个方案,比较完美地解决了同时解决获取返回值和返回信息. def run_linux_cmd_quiet( ...

  8. android 连续调用js方法,Android的WebView中的JavascriptInterface:对JS的多次调用会导致死锁...

    这是我用过的整个Java代码.我将在下面更详细地解释... public class Test7 extends Activity { //debug private final static Str ...

  9. android webView注入js方法

    需要在页面加载完成之后才能注入自定义js方法 webView.setWebViewClient(new WebViewClient() {@Overridepublic boolean shouldO ...

最新文章

  1. uplay服务器未响应,《看门狗:军团》存在崩溃丢失存档BUG 育碧正在修复
  2. Python函数中参数前带*是什么意思?
  3. leetcode 滑动窗口小结 (一)
  4. (数据库系统概论|王珊)第三章关系数据库标准语言SQL-第四节:数据查询
  5. thinkphp-无限分类下根据任意部门获取顶级部门ID
  6. STM32工作笔记0075---UCOSIII任务管理(下)
  7. 程序员到项目经理:从内而外的提升(比较全面的介绍)
  8. 临时修改 macOS 应用的界面语言
  9. 如何一键查看你的QQ/绑定了多少应用?
  10. SecureCRT和SecureFX的下载和安装2022
  11. 阵列卡u盘安装系统步骤_Dell的R720服务器使用U盘安装系统
  12. c语言根据日期求星期蔡勒公式,利用蔡勒公式获得给定日期的星期数
  13. 调查问卷的JSON模板设计与分数计算的Java实现
  14. 普度大学计算机科学博士,普渡大学计算机系 Yongle Zhang课题组招收全奖博士生...
  15. Java实现生成并下载Excel文件
  16. 微信小程序:音乐项目
  17. Html中img src=/图片路径的使用方式
  18. 个性化推荐系统设计(3.1)——如何评价个性化推荐系统的效果
  19. 基于Arduino实现简单人体红外感应灯(人体红外传感器+LED)
  20. RT5350使用uboot从U盘启动linux成功

热门文章

  1. 简单的病毒编程代码Python,利用python编写勒索病毒
  2. Openresrt最佳案例
  3. JS点击进行展开和折叠的功能代码
  4. 微信小程序后端数据\n换行无效解决
  5. 提高微信小程序搜索排名的一些技巧
  6. 听说这10道大数据面试题把 98% 的求职者拒之BAT大厂门外(附解题方法)
  7. tps5430应用电路详解_TPS5430的应用(1)
  8. 重庆自考学历属于什么学历?
  9. 基于jsp,ssm进销存管理系统
  10. 设计模式-责任链模式之**动态配置责任链**