要求:在浏览器关闭时清除localStorage缓存,再次打开项目时进入登录页面,刷新则不清除

以下查询资料以及自身测试后提供五种思路方法:

(前两种判断浏览器关闭还是刷新,后三种判断当前页面是首次加载还是刷新进入)

(来源百度)

一、目前搜出来比较普遍的根据beforunload以及unload执行的间隔时间

在mounted中写入以下两个方法:

window.onbeforeunload=function(e){//执行该事件时将当前时间存入cookie
    this.$cookies.set('_onbeforeTime',new Date().getTime());//格式:名称,值,时长(可不填)
}

window.unload=function(e){
    this._unloadTime=new Date().getTime();
    this._onbeforeTime=this.$cookies.get('_onbeforeTime');//读取cookie值
    this._gap_time=this._unloadTime-this._onbeforeTime;//两个事件执行间隔时间
    /**判断间隔时间,根据个人浏览器性能而定,需要进行测试。
    /* 这里测试出的数据关闭浏览器是在0~8ms
    /* 刷新则是10ms以上
    /* 不同浏览器数据不同,火狐在关闭浏览器时时间差在0~20ms,刷新则在15ms以上
    */
    if(this._gap_time < 8){
        //判断登录状态
        if(!this.isLogin) window.localStorage.clear();
    }
    this.$cookies.remove()//清除cookie缓存
    
}

由于不同浏览器之间两个方法的执行间隔时间不同,因此该方法会不太稳定,建议多测试找到一个稳定的间隔数值

二、原理同上,根据unload以及load的间隔时间判断

一般来说,在刷新时两个方法是紧接着执行的,间隔时间相较于重新打开浏览器而言会小很多,同样的,间隔时间需要多做测试取准确值,此方法相较于第一个方法而言,准确度会高很多

window.onunload=function(e){//执行该事件时将当前时间存入cookie
    this.$cookies.set('_onbeforeTime',new Date().getTime());//格式:名称,值,时长(可不填)
}

window.onload=function(e){
    this._unloadTime=new Date().getTime();
    this._onbeforeTime=this.$cookies.get('_onbeforeTime');//读取cookie值
    this._gap_time=this._unloadTime-this._onbeforeTime;//两个事件执行间隔时间
    /**判断间隔时间,需要进行测试。
    /* 这里测试出的数据关闭浏览器是在10000ms以上
    /* 刷新则是2000ms~9000ms
    */
    if(this._gap_time > 10000){
        //判断登录状态
        if(!this.isLogin) window.localStorage.clear();
    }
    this.$cookies.remove()//清除cookie缓存
    
}

三、根据window.performance.navigation.type属性判断(该属性返回一个整数值,表示网页的加载来源,可能有以下4种情况):


  0:网页通过点击链接、地址栏输入、表单提交、脚本操作等方式加载,相当于常数performance.navigation.TYPE_NAVIGATE。
  1:网页通过“重新加载”按钮或者location.reload()方法加载,相当于常数performance.navigation.TYPE_RELOAD。
  2:网页通过“前进”或“后退”按钮加载,相当于常数performance.navigation.TYPE_BACK_FORWARD。
  255:任何其他来源的加载,相当于常数performance.navigation.TYPE_RESERVED。 

四、在window上添加属性进行区分是否被刷新或者是第一次加载, 即使页面刷新, name属性值也不会被重置, 除非手动关闭当前页面

    if(window.name == ""){//此次为首次加载
        window.name = "reload";  // 给window.name设置一个固定值 
    }else if(window.name == "reload"){//此次为页面刷新
    	//....
    }

五、(只限于谷歌浏览器)根据window.chorme.loadTime().navigation判断

        Reload:刷新页面

        Other:首次打开页面

(方法同三)

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐