前言
现在APP中使用的H5页面越来越多,如何正确获取WebView页面的标题是必须要考虑的问题。
最近在做一个项目的时候,老板让我修改之前做的webview打开网页的功能,说是动态获取网页的标题,然后显示在我们自己的应用程序的标题栏,然后我跌跌撞撞。运行查看webview的源码,看看有没有获取标题的方法。
网上可以查到的大部分方法都是在WebChromeClient的onReceivedTitle(WebView视图,String title)中获取title。但是,该方法在网页回滚时无法得到正确的上层标题。在线处理方式是维护一个List来缓存标题。执行 webView.goBack() 后网页上标题栏没有了,删除 List 的最后一个条目。然后将新的最后一个条目设置为标题栏。
这种方法当然是可行的,但是缓存和移除的时机并不好由自己决定什么时候缓存。onReceivedTitle 方法不仅是在打开页面时调用一次,而是多次调用,之前获取的标题都是空的。
这里使用原生的WebBackForwardList来获取网页上标题栏没有了,详情见代码。
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); }
总结
以上就是本文的全部内容。希望本文的内容对大家的学习或工作有一定的参考和学习价值。有问题可以留言交流,谢谢支持。
推荐内容:免费高清PNG素材下载