当前位置: 首页 > news >正文

iframe和父页面使用message通信,支持跨域

假设在一个主页面中有一个iframeiframe内部的页面通过postMessage发送了一个包含自身高度信息的消息

<!DOCTYPE html>
<html><head><meta charset="UTF - 8"><title>Main Page</title>
</head><body><iframe src="https://example - iframe - domain.com" id="myIframe"></iframe><script>window.addEventListener("message", async (event) => {// 处理接收到的消息let { Height } = event.data;if (Height) {console.log('Height:', Height);// 假设这里根据Height调整iframe的高度document.getElementById('myIframe').style.height = Height + 'px';}});console.log("iframe end");</script>
</body></html>

iframe内部的页面中:

<!DOCTYPE html>
<html><head><meta charset="UTF - 8"><title>Iframe Page</title>
</head><body><script>// 假设这里获取到自身的高度并发送给主页面const iframeHeight = document.body.scrollHeight;window.parent.postMessage({ Height: iframeHeight }, '*');</script>
</body></html>
  1. postMessage方法整体功能

    • window.parent.postMessage是一种用于跨域通信的方法,通常用于在iframe(子窗口)与包含它的父窗口之间,或者不同源的窗口之间进行安全的消息传递。
  2. 参数含义

    • 第一个参数:
      • { Height: iframeHeight }是要发送的数据对象。在这个例子中,创建了一个包含Height属性的对象,其值为iframeHeight(这个变量应该是在前面代码中定义的,表示iframe的高度相关的值)。这个对象可以包含任意复杂的数据结构,如嵌套对象、数组等,根据实际的通信需求而定。
    • 第二个参数:
      • '*'是目标源(target origin)。目标源用于指定消息可以被发送到哪些源(通常是指URL的协议、主机和端口部分)。
      • 如果指定为'*',表示可以将消息发送到任何源,这是一种比较宽松的设置,但在实际的安全敏感场景下可能不建议使用,因为它可能会导致安全风险(例如,恶意网站可能会利用这种宽松的设置来接收消息并进行恶意操作)。
      • 在更安全的场景下,应该指定具体的源,例如,如果父窗口的URL是https://example.com,那么应该将目标源指定为https://example.com,像这样:window.parent.postMessage({ Height: iframeHeight }, 'https://example.com');。这样可以确保消息只被发送到预期的目标源,提高安全性。

http://www.mrgr.cn/news/35211.html

相关文章:

  • Python_爬虫1_Requests库入门
  • Clickhouse集群新建用户、授权以及remote权限问题
  • MySQL【五】
  • 科技云报到:数字化转型,从不确定性到确定性的关键路径
  • 数字化转型企业架构设计手册(交付版),企业数字化转型建设思路、本质、数字化架构、数字化规划蓝图(PPT原件获取)
  • WebRTC项目一对一视频
  • 负载均衡--TLS安全策略(四)
  • Java反射机制入门:解锁运行时类信息的秘密
  • 【解决虚拟机NAT联网】收藏这份教程就不用再辛苦找了
  • Avalonia的第三方UI库Material.Avalonia详细教程
  • Dify部署及初步测试
  • CSS 的元素显示模式简单学习
  • linux命令行快捷键
  • 【Linux】nginx连接前端项目
  • 排序----归并排序(非递归版)
  • 美团外卖霸王餐系统有哪些优势?如何选择?
  • 浙大数据结构:05-树9 Huffman Codes
  • 4款思维导图在线工具,新手速来!
  • chatGPT问答知识合集【五】
  • 【CPP11?】结合CPP发展历史来理解CPP11
  • 掌握Python办公自动化,轻松成为职场高效达人
  • 特殊类设计
  • 一步一步优化一套生成式语言模型系统
  • 二分查找算法(8) _点名
  • Solidity——抽象合约和接口详解
  • 【python】数据类型