嵌入iframe时如何同步menu菜单
在做项目时,发现公司的项目组成是 vue的菜单框架 + iframe 的页面嵌套
这样的好处是便于控制项目的授权,以及控制vue单页面项目的庞大性.
随之而来的问题是: 当内嵌的 iframe 页面跳转到另一个 内嵌的 iframe 页面时,左侧的 menu 菜单没有改变,无法同步.
因为是所属不同的页面,vue 框架无法去接收到 内嵌 iframe 改变的变化
是内嵌的 iframe ,也无法使用组件传值,vuex传值等.
很困扰!
正值公司做技术变革,统一前端域名.
诶,统一域名,我突然想到一个好用的方法!
即本地存储监听.
当同一域名的情况下,电脑上本地存储的数据是可以共享的,那么,即使是多个不同的页面,数据也是可以传送的.
只要在 框架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>
注意:文件的路径自行修改!
效果:


浙公网安备 33010602011771号