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

postmessage的API

发送数据

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

接收数据

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 为要接收数据的iframename属性值;

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

原文地址:https://blog.csdn.net/qq_35517283/article/details/129666586

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_45090.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注