window.postMessage()接收不到信息(失效)的解决办法

所有属性均已附带MDN链接,方便查阅

最近在用 postMessage 做demo时候发现无论怎么都接收不到弹出页所发的消息,以为是弹出的方式有问题遂尝试改动了好几种弹出方式都不生效,最后查阅了MDN后发现标准的用法应当是

otherWindow.postMessage(message, targetOrigin, [transfer]);
//关键在于otherWindow
//其他窗口的一个引用,比如iframe的contentWindow属性、执行window.open返回的窗口对象、
//或者是命名过或数值索引的window.frames。

关键其实在于 otherWindow 或者叫做 targetWindow 更加准确,是指你要发送信息的目标页面的window对象,直接 window.postMessage() 调用的当前窗口的window对象,相当于自己给自己发目标页当然接收不到了。

关于 targetWindow 的获取根据弹出方式不同分为两种

附上一个window.open() 方式弹出的例子,弹出iframe的方式写法大同小异因此不再赘述。

// 接收页
<body>
    <a href="javascript:;" onclick="window.open('./message.html')">xxxx</a>
    <script>
        window.addEventListener('message', function (e) {
            console.log(e.data);
        }, false)
    </script>
</body> 



// 发送页
<body>
    <button class="btn">点击</button>
    <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
    <script>
        var targetWindow = window.opener; // 获取打开此页面的window对象
        $('.btn').click(function () {
            //window.top用于iframe嵌套情况下寻找上级window对象
             // window.top.postMessage({ readFlag: false }, '*') 
            targetWindow.postMessage({ readFlag: false }, '*')
        })
    </script>
</body>
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值