Android获取WebView网页中的title详解

本文主要是介绍在原生APP中打开web页面,获取web的title的几种方法

方式一:通过WebChromeClient中onReceivedTitle()方法来获取

测试1:这种是通过加载本地的html文件来实现的,目录src/main/assets/web.html
在这里插入图片描述

<html>

<head>
    <meta charset="UTF-8"/>
</head>

<body>
<title>我是WebView的title</title>
<p>这是一个写在Android assets中的html文件</p>
<p>通过loadUrl()方法加载到WebView上,显示到页面</p>
<p>file:////android_asset/index.html</p>
</body>

</html>
WebSettings webSettings = webView.getSettings();
// 设置与Js交互的权限
webSettings.setJavaScriptEnabled(true);
webView.setWebChromeClient(new WebChromeClient(){
    @Override
    public void onReceivedTitle(WebView view, String title) {
        super.onReceivedTitle(view, title);
        Log.i("title", "onReceivedTitle: "+ title);
    }
});
webView.loadUrl("file:android_asset/web.html");

输出结果为2020-06-17 12:03:01.258 14095-14095/cn.poco.pMix I/title: onReceivedTitle: 我是WebView的title

测试2 通过加载网络连接来实现,禁止跳转到浏览器的,是加载到本地的

WebSettings webSettings = webView.getSettings();
// 设置与Js交互的权限
webSettings.setJavaScriptEnabled(true);
webView.setWebViewClient(new WebViewClient());
webView.setWebChromeClient(new WebChromeClient(){
    @Override
    public void onReceivedTitle(WebView view, String title) {
        super.onReceivedTitle(view, title);
        Log.i("title", "onReceivedTitle: "+ title);
    }

});
webView.loadUrl("http://14.18.242.229:26001/services/spreader/taoBaoSpreader?id=10&channel=beauty_camera");

我们发现了一个问题,跳转到新的web页面时都是可以打印出title的,但是在回退的过程中没有更新title,一直会显示上次显示的那个标题,因此就有了下面的获取标题的方法

方式二:通过Android和js的交互来获取标题
可以查看我的这个文章Android和js之间的交互

测试1:如果是我们自己写的html文件,直接调用js中的方法获取标题即可

<html>

<head>
    <meta charset="UTF-8"/>
</head>

<body>
<title>我是WebView的title</title>
<p>获取标题</p>
<button type="button" id="button1" onclick="jsCallAndroid()">调用Android的方法</button>
</body>

<script>

        function jsCallAndroid(){
        //document.title 获取标题
            jsTitle.title(document.title)
        }

</script>

</html>
  public class AndroidtoJs {
        @JavascriptInterface
        public void title(String title) {
            Log.i("androidjs", "hello: title  :" + title);
        }
    }
        WebSettings webSettings = webView.getSettings();
        // 设置与Js交互的权限
        webSettings.setJavaScriptEnabled(true);
        //将AndroidtoJs 实体类映射到js中的 jsTitle
        webView.addJavascriptInterface(new AndroidtoJs(), "jsTitle");
        // 格式规定为:file:android_asset/文件名.html
        webView.loadUrl("file:android_asset/web.html");

在这里插入图片描述
输出日志:06-17 06:04:01.370 2426-2462/cn.poco.pMix I/androidjs: hello: title :我是WebView的title

测试二:通过加载网络连接,来获取title
调用WebViewClient里面的onPageFinished方法,每次加载完毕,调用js中获取title的方法

 public class AndroidtoJs {
        @JavascriptInterface
        public void title(String title) {
            Log.i("androidjs", "hello: title  :" + title);
        }
    }
  WebSettings webSettings = webView.getSettings();
        // 设置与Js交互的权限
        webSettings.setJavaScriptEnabled(true);
        //将AndroidtoJs 实体类映射到js中的 jsTitle
        webView.addJavascriptInterface(new AndroidtoJs(), "jsTitle");
        webView.setWebViewClient(new WebViewClient() {
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                return false;
            }

            @Override
            public void onPageFinished(WebView view, String url) {
                super.onPageFinished(view, url);
                //和上面的思路一样,首先要给js中映射一个获取Android的调用方法,在通过Android调用
                //js的方法来获取标题
                webView.loadUrl("javascript:(function(){" + "jsTitle.title(document.title);}" + ")()");
            }
        });
        webView.loadUrl("http://14.18.242.229:26001/services/spreader/taoBaoSpreader?id=10&channel=beauty_camera");

其他的基础可以查看我的这篇文章
Android Webview使用攻略基础详解
Android WebView与 JS 的交互

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值