• 售前

  • 售后

热门帖子
入门百科

一连调用location.href引发的标题

[复制链接]
我是一头牛2017 显示全部楼层 发表于 2022-1-16 16:39:04 |阅读模式 打印 上一主题 下一主题
1、在当前页面未完全加载时,利用location.href跳一下页面,会发现当前页面的汗青偶然会留下,偶然不会留下
【场景举例】在A页面做登录拦截,假如发现未登录则立刻跳B,在B实行history.back(),则偶然会到A,偶然会到A的上一页(观察到与网速有关,网速快时A没汗青,网速慢时A有汗青)。因此,B的上一条histiory不固定的话,返回的功能就会有标题。
【缘故起因分析】参看HTML Standard文档阐明, 假如当前document没有完全加载,则就算利用location.href也相当于replace的作用,原来是historyHanding在作怪

【办理方案】区分historyHanding是否会被置为replace的关键点在于找到Document is completely loaded的时点,经在chrome欣赏器里验证,通过window.onload方法无法判断,通过$(document).ready()也无法判断。

两个办理办法:
方法一:加延时
加100-300ms的延时,包管当前页的汗青肯定存在
方法二:通过document.readyState判断
document.readyState有loading(正在加载)、interactive(可交互)和complete(完成)等状态,实验利用complete来举行判断。假如未加载完成,手动插入一条汗青,以包管当前页汗青肯定存在。
  1. if(document.readyState!=="complete"){
  2.     history.pushState(null,"",location.href);
  3. }
复制代码

2、在iOS webview 中连续快速调用2个location.href,则会导致前一个会被取消
【场景举例】嵌在App中的H5,大概会利用location.href的方式关照原生做一些事变,如隐蔽头部、修改头部颜色、隐蔽菜单等等,当须要同时做多件事变时,在iOS webview中,连续利用location.href,会有哀求abort。因此无法同时关照APP原生做多件事变。
【办理方案】接纳iframe
  1. let iframe = document.createElement("IFRAME");
  2. iframe.style.display = "none";    
  3. iframe.style.height = 0;
  4. iframe.setAttribute("src", url);
  5. document.body.appendChild(iframe);
  6. setTimeout(() => {
  7.     iframe.parentNode.removeChild(iframe);
  8.     iframe = null;
  9. }, 200);
复制代码
3、在欣赏器中,连续调用多个location.href会看到有哀求被cancle掉了。着实标题3与标题2有异曲同工之处。
【场景举例】js循环批量下载文件时,假如利用location.href会出现部分文件无法下载。
【办理方案】接纳iframe,与2类似


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

帖子地址: 

回复

使用道具 举报

分享
推广
火星云矿 | 预约S19Pro,享500抵1000!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

草根技术分享(草根吧)是全球知名中文IT技术交流平台,创建于2021年,包含原创博客、精品问答、职业培训、技术社区、资源下载等产品服务,提供原创、优质、完整内容的专业IT技术开发社区。
  • 官方手机版

  • 微信公众号

  • 商务合作