iframe 子窗口发消息给父窗口(跨域)

2019.10.22 修改

情景:父窗口内通过iframe跨域引入子页面。通过postMessages实现跨域通讯。

跨域情况下:

1. “父” 发消息给 “子”:

子窗口注册 以下事件接收:

window.addEventListener('message', (e) => {}, false)

父窗口通过 以下方式发消息即可:

document.getElementById('iframe').contentWindow.postMessage('来自父窗口的消息', 'c.aaa.com')

2. “子” 发消息给 “父”:

以上方式就不能实现了,因为跨域,子窗口拿不到父窗口的window.parent / top。

(1) 可以通过 “页面代理” 的方式解决, 具体原理:博主“伯纳乌的追风少年”这篇博客写得很清晰。

(2) 父窗口首先postMessage给子窗口,子窗口在接受到消息后,存储 全局/局部 变量 evevt

let parentEvent = null

window.onload = function() {
	window.addEventListener('message', receiveMsg, false)
}

function receiveMsg(e) {
	console.log('子系统接收消息', e)

	// 存储全局变量 e
	parentEvent = e
	event.source.postMessage('消息回传', e.origin);
}

function postMsg() {
	let data = { usr: 'admin', psd: '123' }
	// 1. 这种事拿不到的,跨域
	// window.top.postMessage(data, parentEvent.origin)

	// 2. 通过上一步存储的父窗口对象
	parentEvent.source.postMessage(data, parentEvent.origin)
}

 

此文为自己学习记录,链接了 博主“伯纳乌的追风少年” 的博客,如有侵权,我马上删除,感谢。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值