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

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

作者: 空白青 | 来源:发表于2018-11-20 19:26 被阅读0次

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

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

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
        <script type="text/javascript">
    
            var des ; //全局变量des
    
        </script>
    </body>
    </html>
    

    实现方法是:采用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变量

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