Android正确获取WebView的网页Title

作者: android00 发布时间: 2019-08-21 浏览: 178 次 编辑

现在APP中用到H5页面的越来越多,而如何正确获取WebView的网页title是必须要考虑的。

网上能查的大部分方法都是在WebChromeClient的onReceivedTitle(WebView view, String title)中拿到title。但是这个方法在网页回退时是无法拿到正确的上一级标题的,网上的处理方法是自己维护一个List去缓存标题,在执行完webView.goBack()后,移除List的最后一条,再将新的最后一条设置给标题栏。

这个方法当然是可行的,但是自己缓存时缓存时机和移除时机都不好确定,onReceivedTitle方法在一个页面打开时并不是仅调用一次,而是多次调用,前面拿到的title都为空。

这里采用原生的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);
}