在应用中,有的页面会使用h5来实现,而title确是客户端来实现的,正确的获取h5的标题,设置正确的title
是必须的。
这个在webview中通过api很容易实现。只需要调用这个方法就可以了。
mWebView.setWebChromeClient(new WebChromeClient(){
@Override
public void onReceivedTitle(WebView view, String title) {
super.onReceivedTitle(view, title);
Log.v(TAG,"title:"+title);
}
});
这样的确可以实现设置标题,但是问题来了,你会发现当H5不断的打开,你的标题也跟着相应变化,但是当你点了back键后,页面不断的回退,但是标题确没有任何变化,打开log,原来返回的时候根本没有走onReceivedTitle这个方法。
这个时候,我们可以借助集合来解决这个问题,记录每个网址对应的title,然后在onpagefinish中进行设置。
//记录URL和title
private String mCurrentUrl;
private Map<String,String> titles = new HashMap<String,String>();
mWebView.setWebViewClient(new WebViewClient(){
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
mWebView.loadUrl(url);
return true;
}
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
super.onPageStarted(view, url, favicon);
Log.v(TAG,"start:"+url);
mCurrentUrl = url;
}
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
Log.v(TAG,"finish:"+url);
String title = titles.get(url);
if (!TextUtils.isEmpty(title)){
mTitle.setText(title);
}
}
});
mWebView.setWebChromeClient(new WebChromeClient(){
@Override
public void onReceivedTitle(WebView view, String title) {
super.onReceivedTitle(view, title);
Log.v(TAG,"title:"+title);
if (TextUtils.isEmpty(title)){
title = "";
}
titles.put(mCurrentUrl,title);
}
});
好了,这样,在onpagestart中记录url,在onpagefinish中从集合中取出,这样就解决了问题。