公司有个需求,我们的项目是微服务项目,每个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 个月前
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐