首页 > 学院 > 开发设计 > 正文

webview获取网页title

2019-11-09 18:19:54
字体:
来源:转载
供稿:网友

序言

今天做项目的时候,老大让我把之前做的webview打开网页的功能修改一下,说是要动态的获取网页的标题,然后显示在我们自己app的标题栏上,然后我就屁颠屁颠的跑去看webview的源码,看看有没有获取标题这个方法。

需求:这个是我在Activity中放的一个webview,上面一个title,然后当我点击网页中的链接的时候,我希望页面的title也会跟着改变,当我返回的时候,我也希望title变回当前网页的title

一、首先,webview的加载在这里我们就不多说了,往上有很多这样的例子,如果还不清楚的,请看Webview合集 - 简书

二、然后我们需要获取网页的title

1、在webview中有一个组件,叫做WebChromeClient,这个组件是用来协助Webview处理Js的一些东西的,比如说网站的图标,网站的title,网站的加载进度等等,所以我们可以用这个来获取title。实现它里面的onReceivedTitle这个方法即可:

WebChromeClient wcc = new WebChromeClient() { @Override public void onReceivedTitle(WebView view, String title) { super.onReceivedTitle(view, title); tvTitle.setText(title); }};

获取这个title就可以了,可能有人要说了,你都没有跟你访问的url关联起来,它怎么就能获取title了,难不成他还能上天不成,别急嘛!咱后面还有呢!

2、在webview中还有另外一个组件,叫做WebViewClient,这个组件主要用来辅助webview处理一些简单的html页面内容,比如各种通知,请求事件等等,也就是说在用这个组件你可以监听网页加载是否完成,是否开始等等,然后还有就是可以设置是否在外部浏览器中浏览:

mWebView.setWebViewClient(new WebViewClient() { @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { return false; }});

在执行完这个组件之后我们再来绑定我们的url:

mWebView.loadUrl(url);

好了,现在就可以实时的更换你的title了,但是这里还有一个bug,当然了,这不是我的bug,是WebChromeClient的bug,按返回键的时候,是不会执行onReceivedTitle这个方法的,所以返回的时候title就不会动态的改变了,后来百度到有方法可以让他动态的改变,那就是自己维护,何为自己维护呢:

就是自己创建一个栈,也就是list,来动态添加,删除你浏览的网页

好了,方法有了,咱们来实践一下

PRivate List<String> loadHistoryUrls=new ArrayList<>();

然后我们在刚才WebViewClient那里增加一个方法,onPageFinished,因为每次打开新的网页,完成之后都会执行这个方法:

@Overridepublic void onPageFinished(WebView view, String url) { loadHistoryUrls.add(url);}

那我们在哪里删除呢?当然是返回的地方啊:

/** * 改变返回键的功能,当网页中有需要返回的界面时,网页中优先 * * @param keyCode * @param event * @return */@Overridepublic boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK) { if (mWebView.canGoBack()) { if (loadHistoryUrls.size() > 1) { //重新加载之前的页面,这里为了让标题也能正常显示 String url = loadHistoryUrls.get(loadHistoryUrls.size() - 2); loadHistoryUrls.remove(loadHistoryUrls.size() - 1); if (loadHistoryUrls.size() > 0) { loadHistoryUrls.remove(loadHistoryUrls.size() - 1); } mWebView.loadUrl(url); return true; } } } return super.onKeyDown(keyCode, event);}

好了,到这里我们就维护好了标题实时改动了,我们来看看效果吧!

这是我建的一个android小白的群,各位有兴趣的小白欢迎加群共同学习,也欢迎各位大神进群指导,共勉。群号:541144061


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表