Android通过WebView获取html页面中定义的js变量

一般Android原生与Js互调,一种是js调Android原生给Android传值,一种是Android调Js方法给html传值刷新网页,
还有一种需求 就是怎么在webview加载html网页时获取网页中定义的变量?

比如下面html页面内容,有一个全局的变量des,然后在webview加载该网页时,需要拿到des的值在网页外部使用。




    
    Title


    


实现方法是:采用Android调用JS的方法,进行赋值获取,在onPageFinished方法中通过view.loadUrl("javascript:window.java_obj.getDes(des);");调用给html自定义的getDes(des)方法,其中参数des为网页中的变量名,实现代码如下:

mWebView.setWebViewClient(new WebViewClient() {


            @Override
            public void onPageFinished(WebView view, String url) {
                // 获取页面内容
                view.loadUrl("javascript:window.java_obj.getDes(des);");  // des为html页面中的一个变量
            }

     
        });

接下来通过在WebView初始化的时候添加Js接口,获取getDes(des)中的参数值,实现如下:

 /** 
  * 添加javascriptInterface 
  * 第一个参数:这里需要一个与js映射的java对象 
  * 第二个参数:该java对象被映射为js对象后在js里面的对象名,在js中要调用该对象的方法就是通过这个来调用 
  */  

mWebView.addJavascriptInterface(new JavaScriptObj(), "java_obj");

接下来定义接口类JavaScriptObj,从而获取到html中的变量值

  public final class InJavaScriptLocalObj {
        @JavascriptInterface
        public void getDes(String des) {
            //des 即为 html 文件中的变量参数值
        }
    }

注意的是:

自定义js方法一定要在页面加载完成的方法onPageFinished中去调用,避免html页面中des还未赋值成功,而导致获取不到值的情况。

你可能感兴趣的:(Android通过WebView获取html页面中定义的js变量)