描述: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
然后想到可以利用事件监听解决问题
参考文章【传送门】
- 内嵌 iframe 页面,一般使用 window.parent 或 window.top 来获取父页面的 window 对象
- 在子页面 想使用(或传递给) 父页面的参数,但是原因两个的域名不一样,所以会出现跨域问题。
解决办法
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()顺利关掉。