通过JS注入的方式获取title标签里面的内容

常规的html格式如下:

<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
<title>标题部分-www.baidu.comtitle> 
head> 
<body> 
 内容 
body> 
html> 

在Android上面,我们获取网页的title标签内的内容时通常有以下两种直接方式:

一、通过WebView.getTitle()来获取title,代码如下:

private void webChromClient(){
        WebView webView = new WebView(this);
        webView.getTitle();
}

二、通过WebChromeClient类来获取title,代码如下:

private void webChromClient(){
        WebView webView = new WebView(this);
        webView.setWebChromeClient(new MyChromClient());
}

class MyChromClient extends WebChromeClient{
      @Override
      public void onReceivedTitle(WebView view, String title) {
            super.onReceivedTitle(view, title);
            //title就是网页的标题
        }
}

上面这两种方式,第一种获取更为简单但是如果网页没有加载完成时则获取不到数据。第二种则在网页加载完成后会自动回调接口返回title

但是假如title标签内没有内容时再通过以上两种方式获取时却会获取到该网页的地址,而不是期望的空白字符串。针对这种情况,我们可以使用JS注入的方式解决这种问题,代码如下:

WebView webView = new WebView(this);
    private void init(){
        String url = "http://dn.qq.com/cp/a20170216check/index.html?
                      sServiceType=dn&appid=wxfdab5af74990787a&acctype
                      =wx&code=021VGMQG1WLmd50TG0SG1c3PQG1VGMQ6&state=dn,
                      oFr1jwvssCIetsyvtYsY0KERKq0k,d068ac1531359814a55609
                      cbd1663aeb,1489979487";
        webView.loadUrl(url);
        webView.getSettings().setJavaScriptEnabled(true);
        webView.addJavascriptInterface(new JsToJava(), "myObj");
        webView.setWebViewClient(new WebViewClient(){
            @Override
            public void onPageFinished(WebView view, String url) {
                super.onPageFinished(view, url);
                /*
                view.loadUrl("
                javascript:myObj
                .jsMethod(document
                .getElementsByTagName('title')[0]
                .innerHTML);
                ");
                关键代码 获取title标签内容。代码等同于下面的
                */
                view.loadUrl("
                javascript:myObj
                .jsMethod(document
                .title);
                ");//关键代码 document.title 不止能获取内容还能进行修改
            }
        });
    }

    private class JsToJava{
        /*
        这里需要加@JavascriptInterface,
        4.2之后提供给javascript调用的函数必须带有@JavascriptInterface
        */
        @JavascriptInterface
        public void jsMethod(String title){
            System.out.println("js返回结果:" + title);//处理返回的结果
        }
    }

由上面代码可以知道,我们可以随意对获取到的网址添加js代码来实现我们的需求,所以可以根据情况使用。

下面是参考链接:

http://blog.csdn.net/u011404611/article/details/54289313

http://blog.csdn.net/f917386389/article/details/50167385

http://www.cnblogs.com/rayray/p/3680500.html

你可能感兴趣的:(Android)