Android中Java与Js交互及Js注入取Html标签值详解

开篇导读

Android提供了WebView控件用来处理Web网页,而在网页中,JavaScript一个很举足轻重的脚本。
本文将介绍如何通过JavaScript代码注入实现获取Html中标签值继而实现Java代码和Javascript代码的相互调用


操作步骤

  1. WebView开启Js调用:

    mWebView.getSettings().setJavaScriptEnabled(true);
    
  2. 定义JavaScript调用的交互接口及方法:

    public class JavaScriptInterface {
    
        @JavascriptInterface
        public void getTagVal(final String val) {
    
            if (!TextUtils.isEmpty(shareUrl)) {
                Log.e("log tag", "received from js. val = " + val);
            }
        }
    }
    
  3. WebView设置供JavaScript调用的交互接口。

    //后面 “android” 相当于一个标志符
    mWebView.addJavascriptInterface(new JavaScriptInterface(), "android");
    
  4. 在WebView加载完毕时注入JavaScript代码

    先看网页代码

    //这里是Html中我要通过注入取得的标签代码
    <meta name="tag" content="恭喜你注入成功,得到了返回值" />
    

    再来实现我们的java代码

    mWebView.setWebViewClient(new WebViewClient() {
    
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            view.loadUrl(url);
            //返回值为true的时候控制去WebView打开,为false调用系统浏览器或第三方浏览器
            return true;
        }
    
        @Override
        public void onPageFinished(WebView webView, String url) {
           //此处windows.android.getTagVal中android是第3步中设置的标记,getTagVal是第2步中的接口中的方法名
           //回调的参数中传的就是js代码,自行根据实际html标签脑补或百度
           String js = "window.android.getTagVal(document.getElementsByName('tag')[0].content))";
           webView.loadUrl("javascript:" + js);
        }
    });
    

OK!完美收官