iframe事件关掉父级layer

描述:layui layer弹窗中type:2,url为其他系统的页面
需要利用引用的iframe中的事件关掉父级layer
难点:嵌套为iframe,两个系统没有关联

一始,准备获取父级的layer 的index,关掉。
代码:

//假设这是iframe页
var index = parent.layer.getFrameIndex(window.name); //先得到当前iframe层的索引
parent.layer.close(index); //再执行关闭

引用的页面,配置的有点复杂,弄了好久没有获取到iframe,获取父级的dom时,出现了不同ip的跨域问题。

解决 Blocked a frame with origin “xxx“ from accessing a cross-origin frame

然后想到可以利用事件监听解决问题

参考文章【传送门】

  1. 内嵌 iframe 页面,一般使用 window.parent 或 window.top 来获取父页面的 window 对象
  2. 在子页面 想使用(或传递给) 父页面的参数,但是原因两个的域名不一样,所以会出现跨域问题。

解决办法

1、父页面监听 message,写法固定
window.addEventListener('message', function (e) {
  console.log(e)
})
2、子页面发送 message 消息,并附带参数
// window.parent 是 iframe 子页面获取父页面的 window 对象

// 后面的 * 号就是处理跨域问题的,任何域名都不会出现跨域问题
window.parent.postMessage("需要传递的参数", '*')

// 也可以指定传送域名地址,这个域名不会出现跨域问题,写父页面(接收)域名地址
window.parent.postMessage("需要传递的参数", 'http://0.0.0.0:8080')


监听到嵌套子页面发过来的数据,父级页面利用layer.closeAll()顺利关掉。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值