webview获取⽹页title
序⾔
今天做项⽬的时候,⽼⼤让我把之前做的webview打开⽹页的功能修改⼀下,说是要动态的获取⽹页的标题,然后显⽰在我们⾃⼰app的标题栏上,然后我就屁颠屁颠的跑去看webview的源码,看看有没有获取标题这个⽅法。
需求:这个是我在Activity中放的⼀个webview,上⾯⼀个title,然后当我点击⽹页中的链接的时候,我希望页⾯的title也会跟着改变,当我返回的时候,我也希望title变回当前⽹页的title
⼀、⾸先,webview的加载在这⾥我们就不多说了,往上有很多这样的例⼦,如果还不清楚的,请看⼆、然后我们需要获取⽹页的title
1、在webview中有⼀个组件,叫做WebChromeClient,这个组件是⽤来协助Webview处理Js的⼀些东西的,⽐如说⽹站的图标,⽹站的title,⽹站的加载进度等等,所以我们可以⽤这个来获取title。实现它⾥⾯的onReceivedTitle这个⽅法即可:
WebChromeClient wcc = new WebChromeClient() {
@Override
public void onReceivedTitle(WebView view, String 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,来动态添加,删除你浏览的⽹页
好了,⽅法有了,咱们来实践⼀下
网页appprivate List<String> loadHistoryUrls=new ArrayList<>();
复制代码
然后我们在刚才WebViewClient那⾥增加⼀个⽅法,onPageFinished,因为每次打开新的⽹页,完成之后都会执⾏这个⽅法:
@Override
public void onPageFinished(WebView view, String url) {
loadHistoryUrls.add(url);
}
复制代码
那我们在哪⾥删除呢?当然是返回的地⽅啊:
/**
* 改变返回键的功能,当⽹页中有需要返回的界⾯时,⽹页中优先
*
* @param keyCode
* @param event
* @return
*/
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
if (mWebView.canGoBack()) {
if (loadHistoryUrls.size() > 1) {
//重新加载之前的页⾯,这⾥为了让标题也能正常显⽰
String url = (loadHistoryUrls.size() - 2);
if (loadHistoryUrls.size() > 0) {
}
mWebView.loadUrl(url);
return true;
}
}
}
KeyDown(keyCode, event);
}
复制代码
好了,到这⾥我们就维护好了标题实时改动了,我们来看看效果吧!
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论