vue iframe 刷新保留在原来的页面
vue
vuejs/vue: 是一个用于构建用户界面的 JavaScript 框架,具有简洁的语法和丰富的组件库,可以用于开发单页面应用程序和多页面应用程序。
项目地址:https://gitcode.com/gh_mirrors/vu/vue
免费下载资源
·
公司有个需求,我们的项目是微服务项目,每个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')
}
})
}
GitHub 加速计划 / vu / vue
207.54 K
33.66 K
下载
vuejs/vue: 是一个用于构建用户界面的 JavaScript 框架,具有简洁的语法和丰富的组件库,可以用于开发单页面应用程序和多页面应用程序。
最近提交(Master分支:2 个月前 )
73486cb5
* chore: fix link broken
Signed-off-by: snoppy <michaleli@foxmail.com>
* Update packages/template-compiler/README.md [skip ci]
---------
Signed-off-by: snoppy <michaleli@foxmail.com>
Co-authored-by: Eduardo San Martin Morote <posva@users.noreply.github.com> 4 个月前
e428d891
Updated Browser Compatibility reference. The previous currently returns HTTP 404. 5 个月前
更多推荐
已为社区贡献2条内容
所有评论(0)