美文网首页
Android WebView和JS交互

Android WebView和JS交互

作者: 疯狂的兔子666 | 来源:发表于2018-12-13 11:04 被阅读0次
    web.gif

    WebView的常规配置就不多说了,这里只说一下WebView和 JS的交互问题,通过 WebView的addJavascriptInterface()进行对象映射的方式进行交互。

    步骤

    首先要让WebView能够执行javaScript

    webSettings.setJavaScriptEnabled(true);
    

    然后定义一个和js交互的类

    public class JS2AndroidUtil {
    
        private Activity mActivity;
    
        public JS2AndroidUtil(Activity activity) {
            this.mActivity = activity;
        }
    
        // 定义JS需要调用的方法
        // 被JS调用的方法必须加入@JavascriptInterface注解
        @JavascriptInterface
        public void clickAction(String msg) {
            if (mActivity instanceof WebViewActivity){
                ((WebViewActivity) mActivity).show(msg);
            }
        }
    
    }
    
    

    然后映射到JS中

    // 通过addJavascriptInterface()将Java对象映射到JS对象
            // 参数1:JS调用android中方法对象
            // 参数2:映射到js中的test对象
            webView.addJavascriptInterface(new JS2AndroidUtil(this) , "test");
            webView.loadUrl("file:////android_asset/index.html");
    

    下面看一下H5中的处理:

    <!DOCTYPE html>
    <html>
    <head>
        <meta charset="utf-8">
        <title>Carson</title>
        <script>
             <!--由于对象映射,所以调用test对象等于调用Android映射的对象-->
             function callAndroid(){
                test.clickAction("js调用了android中的clickAction方法");
             }
        </script>
    </head>
    <body>
        <!--点击按钮则调用callAndroid函数-->
        <button type="button"
                id="button1"
                style="width: 500px; height: 100px; font-size:40px; margin-left:40px; margin-top:60px;"
                onclick="callAndroid()">点击调用Android中方法</button>
    
    </body>
    </html>
    

    这里面有两个地方需要对应, 第一个是addJavascriptInterface的时候,定义的test对象,是和JS中对应的,第二个是JS2AndroidUtil 中的clickAction方法也要和JS中对应,这样就能实现Android和JS的交互了。当然,在JS2AndroidUtil 也可以定义一个接口回调到Activity中处理,我这里只是简单处理了一下。

    相关文章

      网友评论

          本文标题:Android WebView和JS交互

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