知识点:window.postMessage

window.postMessage() 方法可以安全的进行跨域、跨页面通信
window.postMessage() 需要在页面加载完毕后才能进行跨域通信,但是我们无法检测目标页面的onload事件,所以只能使用setTimeout和setInterval来处理。

发送消息

otherWindow.postMessage(message, targetOrigin, [transfer])

其中otherWindow是其他窗口的一个引用,而不是当前窗口。
获得其他窗口的引用:

  • iframe的contentWindow属性
  • 执行window.open返回的窗口对象
  • 命名过或数值索引的window.frames。

接受三个参数:

  • message 要发送的信息(字符串和对象都可以)
  • targetOrigin 你要发送信息的目标域名
  • transfer 可选参数

接收消息

其他窗口可以监听派遣的message:

window.addEventListener("message", receiveMessage, false);

收到的MessageEvent有以下几个属性:

  • data:从其他window中传递过来的对象
  • origin:调用 postMessage 时消息发送方窗口的 origin
  • source:对发送消息的窗口对象的引用; 您可以使用此来在具有不同origin的两个窗口之间建立双向通信。

安全问题

  • 如果您不希望从其他网站接收message,请不要为message事件添加任何事件侦听器。
  • 如果您确实希望从其他网站接收message,请始终使用origin和source属性验证发件人的身份。
  • 当您使用postMessage将数据发送到其他窗口时,始终指定精确的目标origin,而不是*。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值