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

  • 相关阅读:
    Power of Cryptography
    Radar Installation
    Emag eht htiw Em Pleh
    Help Me with the Game
    89. Gray Code
    87. Scramble String
    86. Partition List
    85. Maximal Rectangle
    84. Largest Rectangle in Histogram
    82. Remove Duplicates from Sorted List II
  • 原文地址:https://www.cnblogs.com/tc310/p/11116128.html
Copyright © 2011-2022 走看看