美文网首页
android调用js,js调用Android http地址实测

android调用js,js调用Android http地址实测

作者: Lna_35da | 来源:发表于2020-06-18 15:46 被阅读0次

    从网上巴拉了很多都是有一丝丝问题不够完美 主要问题就是Android调用js不通。
    问题场景js调用了Android后立马回调js方法出现调用无效。但是从点击时间调用js是没有问题的。
    解决方案以及完整代码如下:

    //开启JavaScript支持
    mWebview.getSettings().setJavaScriptEnabled(true);
    // 注册js调用Android对象  这李的Android参数与html方法要保持一致
    mWebview.addJavascriptInterface(new Info(), "android");
    mWebview.loadUrl("file:///android_asset/alert.html");
    

    JS调用Android的方法类

    /**
    * js调用Android方法
    */
    @SuppressLint("JavascriptInterface")
    public class Info {
    @JavascriptInterface
    public void getInfo(String data) {
    //            js调用Android有参方法
    ToastUtil.showShortToast(data);
    toJs();
    }
    
    @JavascriptInterface
    public void getInfo() {
    //           js调用Android 无参方法
    ToastUtil.showShortToast("js调用无参");
    toJs();
    }
    }
    

    Android调用JS的方法

    /**android调用js
    * 必须要切换到UI线程!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    *
    * */
    @JavascriptInterface
    public void toJs() {
    ThreadUtil.runOnUiThread(new Runnable() {
    @Override
    public void run() {
    //注意test的''单引号
    mWebview.loadUrl("javascript:javacalljswith(" + "'test'" + ")");
    }
    });
    }
    

    下面是html代码,这段代码可以放服务器远程访问效果是一样的,。

    <html>
    <head>
        <meta http-equiv="Content-Type" charset="UTF-8"/>
    
        <script type="text/javascript">
                function javacalljs(){
                     document.getElementById("showmsg").innerHTML = "JAVA调用了JS的无参函数";
                }
    
                function javacalljswith(arg){
                     document.getElementById("showmsg").innerHTML = (arg);
                }
    
    
        </script>
    
    </head>
    
    <body>
    <h3>Web模块</h3>
    
    <h3 id="showmsg">调用js显示结果</h3>
    <!--调用无参  window.android.getInfo()  注意这个android要和webview注册js时的第二个参数一样 -->
    <!--//        注册js调用Android对象
    mWebview.addJavascriptInterface(new Info(), "android");-->
    <input type="button" value="Js调用Java代码" onclick="window.android.getInfo()"/>
    <!--调用有参-->
    <input type="button" value="Js调用Java代码并传参数" onclick="window.android.getInfo('Js传过来的参数')"/>
    </body>
    </html>
    

    ThreadUtil工具类参考这三行代码

    Looper mainlooper = Looper.getMainLooper();
    Handler handler = new Handler(mainlooper);
    handler.post(runnable);
    

    相关文章

      网友评论

          本文标题:android调用js,js调用Android http地址实测

          本文链接:https://www.haomeiwen.com/subject/vnpuxktx.html