zoukankan      html  css  js  c++  java
  • 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
    版权声明:本文为博主原创文章,转载请附上博文链接!

  • 相关阅读:
    config文件 反射方法
    模块"xxxx.dll"已加载,但对DllRegisterServer的调用失败,错误代码为 XXXXXXXXX
    多线程定时 每天执行
    监控windows服务,当服务停止后自动重启服务
    log4net使用(winform)
    sql 第 10条 到20条
    windows 服务
    安卓屏幕模拟器
    dg_MeetingRoom 居中显示
    sql 清空所有数据
  • 原文地址:https://www.cnblogs.com/tc310/p/11116128.html
Copyright © 2011-2022 走看看