Android6.0里面webview关于onReceivedTitle的一个系统bug

在Android6.0系统里面,onReceivedTitle方法默认会调用两边,第一遍title现实的是当前webview的url,第二遍才是从连接中获取的tiitle,因此为了避免刷新webview的时候,会在title的位置显示url,可以做如下处理

webView.setWebChromeClient(new WebChromeClient() {
    @Override
    public void onReceivedTitle(WebView webView, String title) {
        //为解决6.0系统上,这个api会调用两次,而且第一次是显示url的系统bug
        if(null != title && !StringUtils.getRemoveHttpUrl(title).equals(StringUtils.getRemoveHttpUrl(webView.getUrl()))){
            activity.setTitle(title);
        }
    }

    @Override
    public void onProgressChanged(WebView view, int newProgress) {
        if (newProgress == 100) {
            
        }
    }
});
/**
 * 获取去掉协议头的url
 * @param url
 * @return
 * @auther jmtian
 */
public static String getRemoveHttpUrl(String url){
    return url.replace("http://","").replace("https://","");
}

备注:这里之所以做去掉协议头的处理,是因为我调试的时候发现,title包含的url,有时候有协议头,有时候没有,这个具体为什么,我也不太清楚,有知道的小伙伴,希望告知。因此,我就直接把协议头去掉,只做后面url内容的比较。



今天再补充一下,发现自己脑子短路了,判断匹配那里不需要那么麻烦就行,只需要如下,判断提提了是否包含在url里面即可,另外,也发现了,为什么title里面有时有协议头,有时没有。(当url是http://的时候,title里面不含http://,当url是https://的时候,title里面就包含https://)

@Override
public void onReceivedTitle(WebView webView, String title) {
    //为解决6.0系统上,这个api会调用两次,而且第一次是显示url的系统bug
    if(null != title && !webView.getUrl().contains(title)){
        activity.setTitle(title);
    }
}

  • 5
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值