iframe使用postmessage实现父子页面和子页面间的跨域通信,以及window.parent.document 跨域错误

iframe使用postmessage实现父子页面和子页面间的跨域通信,以及window.parent.document 跨域错误

postmessage的API

发送数据:

targetWindow.postMessage(message, targetOrigin, [transfer])
  • message: 要发送的数据,【只能传普通对象,对于Error以及Function等是不能传递的,会导致克隆数据出错。】;
  • targetOrigin:指定哪些窗口能接收到消息事件,其值可以是 *(表示无限制)或者一个 URI。
  • transfer: 可选,是一串和 message 同时传递的 Transferable 对象。这些对象的所有权将被转移给消息的接收方,而发送一方将不再保有所有权。

接收数据:

window.addEventListener('message', function (e) {  // 监听 message 事件
    if (e.origin !== "lol") {  // 验证消息来源地址
        return;
    }
    messageEle.innerHTML = "从"+ e.origin +"收到消息: " + e.data;
});

父子页面传送数据

父页面接收:
window.addEventListener('message', function (event) {
    console.log(event)
})

子页面发送:
window.parent.postMessage({ isDialog: false }, '*')

子页面之间传送数据

子页面A接收:
window.addEventListener('message', function (event) {
    console.log(event)
})
子页面B发送:
window.parent.frames['iframeName'].postMessage(_obj, '*')
// iframeName 为要接收数据的iframe的name属性值;

注意:
当使用window.parent.document.getElementById(‘iframeId’).contentWindow.postMessage传递消息的时候,需要确保子页面和父页面是否是同源,否则会报跨域的错误。因为对于不同源的父子页面,使用window.parent.会获取不到document元素,这时建议用name的方式通过==window.parent.frames[name]==获取iframe元素

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值