iframe如何获取父级页面的变量亦或者window对象?

打印以后发现是这样访问的:iframe里面,window.widow.VAL

但是window里面包含了非常多层,这是什么原因?

即我在父页面的window挂一个变量VAL
window.VAL = 1
那么在父页面里面的iframe访问VAL可以通过:window.widow.VAL/window.widow.window.VAL。
为什么window一直包含window?

阅读 10k
5 个回答

如果是父子级关系
假如我在父页面定义一个变量

var value=1

子页面可以直接通过

parent.value 获取父页面的这个变量

注意的是 父页面的定义的变量必须是全局的

window不知道,但应该也可以根据这种方法套,

比如parent.$("#id")

window.parent.VAL

父窗口对象:window.parent.document

window.parent

一、同源环境

 1、首先在父页面获取iframe中的window,然后获取元素,根据window,不仅可以获取元素,还能调用里面的方法,前提是绑定在window上面

var ifW = $('#ifr')[0].contentWindow;

ifW.document.getElementsByClassName('wrap')
2、在iframe中获取父页面的window

1
window.parent
3、那么问题来了。这里有些人可能发现,获取元素的时候,根本获取不到,或者有时候有,有时候没有,很奇怪。。。其实呢,这是因为你引入iframe的时候,不能确定iframe是否加载完成,另外具体是iframe里面的js先执行,还是父页面的js先执行,也是个问题。既然问题找到了,那就可以给  

ifW.document.getElementsByClassName('wrap')
这句代码加个延时,或者写在点击事件里面,等点击触发才去获取,这个时候就没有问题了

二、非同源
可以使用 HTML5的api , window.postMessage

在 iframe 里面,向父页面发送消息
1
window.top.postMessage("close",'*');
  

在父页面,,监听消息
1
2
3
4
window.addEventListener("message", function(event){

var origin = event.origin || event.originalEvent.origin;
             

}, false);

当然也可以在 iframe里面监听事件, 父页面发送消息

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题