在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
版权声明:本文为博主原创文章,转载请附上博文链接!

最新文章

  1. Windows光标形状
  2. C# 获取 新浪微博登录之后的 完整的Cookie
  3. java 28 - 1 设计模式 之 面向对象思想设计原则和模版设计模式概述
  4. IOS- 02 零碎知识总结
  5. ACM 矩阵题目整理
  6. oracle中的常用语句
  7. ASP+Access UTF-8 网页乱码问题解决办法
  8. Linux I/O模型
  9. 爬虫遇到取到网页为reload的问题
  10. 微信上传图文消息invalid media_id hint,thumb_media_id怎么获取
  11. C# 数据结构 线性表(顺序表 链表 IList 数组)
  12. Android CursorAdapter
  13. shell写多行到文件中
  14. oracle表空间增长异常或表空间占用过高问题分析
  15. win10提示管理员已阻止你运行此应用,如何强制运行
  16. iOS12系统应用发送邮件中的附件
  17. layui 重加载
  18. Leetcode 949. 给定数字能组成的最大时间
  19. 修改JAVA代码,需要重启Tomcat的原因
  20. Dubbo的原理以及详细原理、配置

热门文章

  1. sql注入原理,利用与防护
  2. 【CPU】记录当前嵌入式设备CPU 比较最高CPU 并打印出来
  3. hibernate的详解
  4. js 正则表达式将 p标签替换 span标签
  5. spring-JDBC配置,使用,一些报错,mybatis原理,优化
  6. Java易混小知识——equals方法和==的区别
  7. pandas处理json脱坑(一)--JsonError: Expecting property name enclosed in double quotes
  8. DisplayModeProvider完成移动开发自动视图解析
  9. MySQL percona-toolkit工具详解
  10. Tpcc-mysql 结果解读