- 部分机型(比如 华为 SCL-AL00, Android 5.1.1)上在调用
WebView.goBack()
之后WebChromeClient.onReceivedTitle()
方法不会被调用, 因此会造成title显示不正确的情况.
//解决方法是: 在goBack之后, 获取访问历史, 从中取出历史记录中的title来显示
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if(keyCode == KeyEvent.KEYCODE_BACK) {
if(webView.canGoBack()) {
webView.goBack();
//注意: goBack(), goForward(), goBackOrForward() 方法调用不会影响返回的 WebBackForwardList, 改变的仅仅是 currentIndex 游标
WebBackForwardList list = webView.copyBackForwardList();
if(BuildConfig.DEBUG) {
dumpWebBackForwardList(list);
}
WebHistoryItem item = list.getCurrentItem();
if(item != null) {
mNavigationBar.setTitle(formatTitle(item.getTitle()));
}
return true;
}
}
return super.onKeyDown(keyCode, event);
}
注意:
- goBack(), goForward(), goBackOrForward() 方法调用不会影响返回的 WebBackForwardList, 改变的仅仅是 currentIndex 游标
- goForward()方法在某些ROM上也会有类似的问题, 可以用上述的方式一并解决