iframe访问父级窗口中的变量或dom元素

1,827 阅读1分钟

iframe共享js对象

目的

需求

在nav.html中的js文件中创建了一个js对象(menu),

现在想在iframe中获得menu,

错误

//index.js
//一开始想的是在index.js定义一个全局变量menu,
var menu=null;
<!--nav.html-->
<script type="text/javascript" src="/js/index.js"></script>
<script type="text/javascript">
	//然后在把menu赋值
    menu = new Menu();
</script>
<!--iframe.html-->
<script type="text/javascript" src="/js/index.js"></script>
<script type="text/javascript">
    //最后在iframe中访问menu
    console.log(menu)
    //这样打印的结果为null
</script>

这种方法不行

对前端js有误解

上面的做法相当于,其实在nav.html和iframe.html中都有变量menu,在nav.html中赋值并不会在iframe取到

正确

<!--iframe.html-->
<script type="text/javascript">
    var menu=window.parent.menu//这样获得了nav.html中定义的
</script>

window.parent 获得父级窗口,这样就可以获得父级窗口的所有内容,js对象和dom元素

dom元素通过window.parent.document.getElementById()类似的方法获得