vue iframe 刷新保留在原来的页面
页面刷新 iframe 保留在原来的页面
·
公司有个需求,我们的项目是微服务项目,每个tab里面的内容都是 iframe,现在需求是点击刷新 F5 等刷新,iframe 还保留在原来的页面。
1. iframe 子页面 router.js 中监听路由变化,并存储当前页面的路由
router.beforeEach((to, from, next) => {
sessionStorage.setItem('routerName', to.path) //存储当前路由
next()
})
2.在 iframe App.vue mounted 下,监听页面刷新,判断是否存有路由,如果存在,跳转到存的这个路由,否则去主页面
mounted () {
window.addEventListener('beforeunload', e => {
sessionStorage.setItem('beforeunload', 1);
});
// 监听页面刷新
if (sessionStorage.getItem('beforeunload') == 1) {
let name = sessionStorage.getItem("routerName");
if (name) {
this.$nextTick(function () {
this.$router.push({ path: name }); //如果sessionStorage存在路由,去缓存的路由
})
}else{
this.$nextTick(function () {
this.$router.push({ path: '/' }); //不存在存储,去主页
}
}
}
},
3.补充:这种写有个问题,当关闭tab的时候,routerName,缓存没有删除,所以下次重新打开这个iframe的时候可能会跳转 sessionStorage 中存储的路由,根据实际情况进行改写
在关闭tab的方法中,用 postMessage 像子页面 iframe 传递数据, targetKey 是当前关闭的key,比如关闭的targetKey 是 0006
**框架中的代码你自己组件的代码位置 **
//关闭应用窗口,
const removeApp = (targetKey) => {
const frame = document.querySelector("#iframe");
setTimeout(() => {
frame.contentWindow.postMessage(targetKey, "*") //传递数据给子页面
})
}
iframe 子页面中代码
APP.vue 中 mounted 事件中,这里的代码写在,监听刷新上面,因为要在刷新前判断有没有被清空
mounted () {
//关闭tab时,清空保存的路由
window.addEventListener("message", function (e) {
console.log('iframe传值',e);
if(e.data == '0006'){ //如果传过来的值是0006 清空 sessionStorage
sessionStorage.removeItem('routerName')
}
})
}
更多推荐
已为社区贡献3条内容
所有评论(0)