Android开发笔记之如何正确获取WebView的网页Title
获取h5页面的携带的title中是很简单的,下面这篇文章主要给大家介绍了关于Android开发笔记之如何正确获取WebView的网页Title的相关资料,文中通过示例代码介绍的非常详细,需要的朋友们下面来一起看看吧 在Android开发中,WebView是一个非常重要的组件,它允许我们在原生应用中加载和展示Web内容。经常遇到的需求是,当用户浏览H5页面时,我们需要动态地获取网页的标题,并将其显示在应用的标题栏上。这篇开发笔记将详细介绍如何在Android中正确地获取WebView的网页Title。 大部分开发者可能会尝试使用`WebChromeClient`的`onReceivedTitle()`方法。此方法会在WebView加载新页面或页面Title变化时被回调,传递当前页面的Title。然而,这个方法存在一个问题,即当用户点击浏览器的返回按钮回退至上一页面时,`onReceivedTitle()`并不会自动更新为上一页面的Title。为了解决这个问题,通常需要开发者自行维护一个标题列表。 常见的解决方案是创建一个`List`来存储每个页面的Title,每当`onReceivedTitle()`被调用时,将新Title添加到列表中。然后在`webView.goBack()`执行后,移除列表中的最后一个Title并使用倒数第二个Title作为新的页面标题。但这种方法存在一个潜在的问题:何时添加Title到列表,以及何时安全地移除Title,都需要精确的控制,否则可能会导致Title显示不准确。 为了解决这个问题,我们可以使用原生的`WebBackForwardList`。`WebBackForwardList`提供了对浏览历史的访问,包括当前页面和前后的页面。我们可以在`onReceivedTitle()`中调用`webView.copyBackForwardList()`获取这个列表,然后通过`getCurrentItem()`获取当前页面的`WebHistoryItem`,其中包含了页面的Title。这样,即使在页面回退时,也能准确地获取到上一页面的Title。以下是具体的实现代码: ```java webView.setWebChromeClient(new WebChromeClient() { @Override public void onReceivedTitle(WebView view, String title) { getWebTitle(); } }); private void getWebTitle() { WebBackForwardList forwardList = webView.copyBackForwardList(); WebHistoryItem item = forwardList.getCurrentItem(); if (item != null) { setActionBarTitle(item.getTitle()); } } private void onWebViewGoBack() { webView.goBack(); getWebTitle(); } @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if (webView.canGoBack()) { onWebViewGoBack(); return false; } return super.onKeyDown(keyCode, event); } ``` 通过这样的方式,我们能够确保无论用户在WebView中如何浏览,都能够实时且准确地获取并显示当前页面的标题。此外,对于`onKeyDown()`方法的覆盖,是为了在用户按下设备的返回键时,同样能够正确执行回退操作并更新标题。 总结来说,正确获取WebView的网页Title的关键在于利用`WebChromeClient`的`onReceivedTitle()`和`WebBackForwardList`。这不仅可以避免手动维护标题列表带来的复杂性,还能确保在页面回退时获取到正确的标题。希望这个方法对你的Android开发工作有所帮助,如果在实践中遇到任何问题,欢迎进行讨论和交流。
- 粉丝: 4
- 资源: 922
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- (源码)基于C语言的系统服务框架.zip
- (源码)基于Spring MVC和MyBatis的选课管理系统.zip
- (源码)基于ArcEngine的GIS数据处理系统.zip
- (源码)基于JavaFX和MySQL的医院挂号管理系统.zip
- (源码)基于IdentityServer4和Finbuckle.MultiTenant的多租户身份认证系统.zip
- (源码)基于Spring Boot和Vue3+ElementPlus的后台管理系统.zip
- (源码)基于C++和Qt框架的dearoot配置管理系统.zip
- (源码)基于 .NET 和 EasyHook 的虚拟文件系统.zip
- (源码)基于Python的金融文档智能分析系统.zip
- (源码)基于Java的医药管理系统.zip