嵌入iframe时如何同步menu菜单

在做项目时,发现公司的项目组成是 vue的菜单框架 + iframe 的页面嵌套

这样的好处是便于控制项目的授权,以及控制vue单页面项目的庞大性.

随之而来的问题是: 当内嵌的 iframe 页面跳转到另一个 内嵌的 iframe 页面时,左侧的 menu 菜单没有改变,无法同步.

因为是所属不同的页面,vue 框架无法去接收到 内嵌 iframe 改变的变化

是内嵌的 iframe ,也无法使用组件传值,vuex传值等.

很困扰!

正值公司做技术变革,统一前端域名.

诶,统一域名,我突然想到一个好用的方法!

 

web Storage 事件通知机制

即本地存储监听.

当同一域名的情况下,电脑上本地存储的数据是可以共享的,那么,即使是多个不同的页面,数据也是可以传送的.

只要在 框架vue 页面上监听特定的本地存储信息,那么在其他页面时改变这特定的本地存储信息时,框架页面便会接收到改变信息的状态,即可更改菜单menu的选中状态.

为了第一时间触发监听,我们可以把监听事件写在 框架的app.vue页面中,通过vuex的形式调用,如果其他地方需要使用的话也比较方便.
具体的代码不方便列出.
demo如下

框架页面 demo.html:

<!DOCTYPE html>
<html>
  <head>
    <title>监听本地存储demo,外部框架</title>
  </head>

  <body>

    <iframe src="./iframe.html" frameborder="0"  height="500px" width="800px"></iframe>


      window.addEventListener("storage", callback, false);

      function callback(se) {
        console.log("被修改的key:" + se.key);
        console.log("原值:" + se.oldValue);
        console.log("新值:" + se.newValue);
        console.log("url地址:" + se.url);

        if (se.key == "token") {
          console.log("token已被修改!");
        }
      }
    </script>
  </body>
</html>

内部嵌入iframe 页面 iframe.html:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>内部嵌入页面</title>
</head>
<body>
    <button onclick="store()">改变存储</button>

<script type="text/javascript">
    function store(){
        var str = prompt('请输入')
        localStorage.setItem('token',str)
    }
    </script>
</body>
</html>

注意:文件的路径自行修改!

效果:

 

posted @ 2022-02-19 10:46  花开丶良人归  阅读(332)  评论(0编辑  收藏  举报