在应用中,有的页面会使用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中进行设置。
-
- 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中从集合中取出,这样就解决了问题。