window.location.href 加载完成修改title_动态修改document.title失效

bce71577e1359c9ecc78ebd361f925f4.png

背景:如果页面title是异步获取的数据,那么拿到数据直接使用document.title会在ios低版本出现失效的问题,因为页面加载完成后title被确定,此后不再监听title的change事件

解决方法:获取到数据后,动态创建iframe标签,src指向一个非常小的资源,监听load事件,加载完成立即删除即可更新title

代码:

      document.title = this.title;
      let iframe = document.createElement('iframe');
      iframe.src = require('/favicon.ico');
      iframe.style.display = 'none';
      let fn = function () {
        setTimeout(function () {
          iframe.removeEventListener('load', fn);
          document.body.removeChild(iframe);
          console.log('title', document.title);
        }, 0);
      };
      iframe.addEventListener('load', fn);
      document.body.appendChild(iframe);

原理: iframe是内联框架元素,可以将另一个html元素嵌入到当前页面,当异步获取到数据后,动态创建的iframe根据指定src发送请求,从而触发title的监听,加载完后移除不会对页面造成影响。

针对ios:由于只是部分ios的微信浏览器有此现象,所以不需要对所有设备进行此操作,可进行判断

iphone8P 微信 useragent: Mozilla/5.0 (iPhone; CPU iPhone OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 MicroMessenger/7.0.8(0x17000820) NetType/WIFI Language/zh_CN
var ua = navigator.userAgent.toLowerCase();
if(ua.match(/MicroMessenger/i)=="micromessenger" && !!ua.match(/(i[^;]+;( U;)? CPU.+Mac OS X/i)){
   ...iframe操作
}

该方案无法解决的问题:

ios safari的地址栏显示域名,无法通过此方法修改title

安卓部分野鸡浏览器(安卓低版本自带浏览器)显示的是完整url

如果你有解决方案,欢迎讨论 :D

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值