【vue】vue 关闭浏览器窗口的时候,清空localStorage的数据

vue 关闭浏览器窗口的时候,清空localStorage的数据

如果是用vue做的单页面程序的时候,将监听的方法放在App.vue是最灵活的

<template>
    <div id="main" class="app-main">
        <router-view></router-view>
    </div>
</template>
 
<script>
    export default {
        data () {
            return {
                theme: this.$store.state.app.themeColor
            };
        },
        mounted () {
 
        },
        beforeDestroy () {
 
        },
        methods: {
 
        },
        mounted(){
            // 关闭浏览器窗口的时候清空浏览器缓存在localStorage的数据
            window.onbeforeunload = function (e) {
                var storage = window.localStorage;
                storage.clear()
            }
        }
 
 
    };
</script>
 
<style>
html,body{
    width: 100%;
    height: 100%;
    background: #f0f0f0;
    overflow: hidden;
}
.app-main{
    width: 100%;
    height: 100%;
}
</style>

二、如果是多页面的程序的话,在每一个页面同理只要在mounted方法中,注册这个事件即可!


如何机智判断页面是刷新还是关闭,背景:vue项目,需求:关闭页面,下次直接跳到登陆页

最近项目有这么个需求:要在关闭当前系统的窗口的时候,退出登录,

因为如果不退出登录可能存在安全风险,其实我想说,电脑没事别借给别人或者离开工位记得一定要锁屏,其实我们设置了cookie失效时间的,过了一段时间会自动清空cookie。

经过我查资料,自身尝试网上的各种方法,发现都有问题。

总结这一路的尝试:

一、页面加载时只执行onload ,页面关闭时只执行onunload,页面刷新时先执行onbeforeunload,然后onunload,最后onload。

经过验证我得出的结论是:

(1)对于ie,谷歌,360:

//页面加载时只执行onload//页面刷新时,刷新之前执行onbeforeunload事件,在新页面即将替换旧页面时onunload事件,最后onload事件。//页面关闭时,先onbeforeunload事件,再onunload事件。

(2)对于火狐:

//页面刷新时,只执行onunload;页面关闭时,只执行onbeforeunload事件那么回归正题,到底怎样判断浏览器是关闭还是刷新?我按照网上的各种说法实验千百遍,都未成功,

二、机智的判断页面刷新还是关闭

关键点:刷新完成之后会执行onload方法,根据session存标志变量来清空cookie

我的思路是:刷新和关闭,无论哪个浏览器都会执行onunload方法或者onbeforeunload方法,其实我们在这两个方法里是判断不了的,但是在刷新之后会再一次执行onload方法,所以我在这两个方法里将一个标志位变量放在session里。然后在onload方法执行的时候判断session里是否有这个变量,有的话,说明是刷新,不然就是关闭。

import Cookies from 'js-cookie'

/*区分关闭和刷新,关闭退出登录 start*/
window.onload = function(){
  if(!window.sessionStorage["tempFlag"]){
    Cookies.remove('userId')
    Cookies.remove('userName')
    location.reload();   //不能省,强制跳到登陆页
  }else{
    window.sessionStorage.removeItem("tempFlag");
  }
}
window.onunload = function (){
  window.sessionStorage["tempFlag"] = true;
}
window.onbeforeunload = function (){
  window.sessionStorage["tempFlag"] = true;
}

目前项目中使用时可行的,不足的地方:一个系统的多个页面同时打开,关掉其中一个页面也会清空cookie,重新登录

谁让项目登录用的是cookie存,如果换成session存登录信息就不一样了

  • 7
    点赞
  • 44
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
Vue页面缓存数据是指在使用Vue进行页面开发时,可以通过一些方法将页面中的数据缓存起来,以便在页面重新打开时可以快速恢复到之前的状态。而页面关闭清除数据,则是指当用户关闭页面时,需要将缓存数据清除,以确保下次打开页面时不会加载上次的数据。 在Vue中,可以通过使用Vuex来实现页面数据缓存清除Vuex是Vue的官方状态管理库,用于在Vue应用中集中管理共享的状态。在Vuex中,可以将页面需要缓存数据保存在state中,当页面关闭时,可以通过mutation来清除这些数据。 首先,在Vuex中定义一个用于保存页面数据的state,例如: ```javascript state: { cachedData: null } ``` 然后,在mutations中定义一个用于清除数据的mutation: ```javascript mutations: { clearData(state) { state.cachedData = null; } } ``` 接下来,在页面关闭时调用清除数据的mutation。可以在Vue的beforeDestroy钩子函数中调用该mutation,例如: ```javascript beforeDestroy() { this.$store.commit('clearData'); } ``` 这样,在页面关闭时,就可以清除已经缓存数据了。 另外需要注意,在使用Vue的路由进行页面切换时,如果需要缓存数据,可以在路由配置中设置: ```javascript { path: '/example', component: Example, meta: { keepAlive: true } } ``` 通过设置meta中的keepAlive属性为true,可以使页面在切换时保持缓存数据。 总结起来,Vue页面缓存数据可以通过Vuex进行实现,通过将需要缓存数据保存在state中,并在页面关闭时调用mutation来清除数据。同时,在使用Vue的路由时,还可以通过设置meta中的keepAlive属性来控制页面数据缓存

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值