为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

猛跑小猪 2019-05-19 15:00:23
打印以后发现是这样访问的:iframe里面,window.widow.VAL但是window里面包含了非常多层,这是什么原因?即我在父页面的window挂一个变量VALwindow.VAL = 1那么在父页面里面的iframe访问VAL可以通过:window.widow.VAL/window.widow.window.VAL。为什么window一直包含window?
查看完整描述

5 回答

?
弑天下

TA贡献1818条经验 获得超8个赞

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

var value=1

子页面可以直接通过

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

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

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

比如parent.$("#id")


查看完整回答
反对 回复 2019-05-19
?
侃侃尔雅

TA贡献1801条经验 获得超16个赞

window.parent.VAL


查看完整回答
反对 回复 2019-05-19
?
30秒到达战场

TA贡献1828条经验 获得超6个赞

父窗口对象:window.parent.document


查看完整回答
反对 回复 2019-05-19
?
慕慕森

TA贡献1856条经验 获得超17个赞

window.parent


查看完整回答
反对 回复 2019-05-19
?
千巷猫影

TA贡献1829条经验 获得超7个赞

一、同源环境

 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里面监听事件, 父页面发送消息


查看完整回答
反对 回复 2019-05-19
  • 5 回答
  • 0 关注
  • 6976 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信