WebView 返回键 onReceivedTitle 不触发 问题解决

本文介绍了一种在使用WebView时确保各个页面标题正确加载的方法。通过使用HashMap存储URL及其对应的标题,并在onReceivedTitle中更新标题,同时在onPageStarted中从HashMap中获取并设置标题,实现了跨版本兼容性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

现在用到webview的地方 都希望加载标题,但如果是多级页面,在返回的时候,有些版本的机器 特别是4.4 之前 并不会触发 onReceivedTitle ,网上有一堆方法,不过感觉都兼容性不好,
首页应该也是用一个hashmap存 url 和标题 


private Map<String, String> titleMap = new HashMap<>();


其次在 WebChromeClient 中  覆写 onReceivedTitle 方法  ,注意的是过滤一下锚点,否则以后会很容易同没锚点的混淆




 Override
            public void onReceivedTitle(WebView view, String title) {
                super.onReceivedTitle(view, title);
                tv_title_bar_title.setText(title);
                String currentUrl = view.getUrl();
                String cleanUrl = currentUrl.replaceAll("\\#(.*)?", "");
                titleMap.put(cleanUrl, titleStr);
            }


接下来才是关键 ,最好是在 WebViewClient 里面 覆写 onPageStarted 方法,而不是在其他方法里,这样可以获得最大的兼容性,这里对url的处理也应该去掉锚点


@Override
            public void onPageStarted(WebView view, String url, Bitmap favicon) {
                super.onPageStarted(view, url, favicon);
                String cleanUrl = url.replaceAll("\\#(.*)?", "");
                String str = titleMap.get(cleanUrl);
                if(StringUtils.isNotBlank(str)) {
                    tv_title_bar_title.setText(str);
                }
            }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值