iframe嵌套网页使用window.postMessage()跨域通信

window.parent.postMessage 解决iframe父子页面域名不一样出现的跨域问题 window.parent.postMessage 解决iframe父子页面域名不一样出现的跨域问题内嵌 iframe 页面,一般使用 window.parent 或 window.top 来获取父页面的 window 对象在子页面 想使用(或传递给) 父页面的参数,但是原因两个的域名不一样,所以会出现跨域问题。 阅读详情

1. 什么是跨域

  • 跨域,指的是浏览器不能执行其他网站的脚本。
  • 它是由浏览器的同源策略造成的,是浏览器施加的安全限制。
  • 所谓同源是指相同的域名、协议和端口,只要其中一项不同就为跨域。
  • 举几个例子:
地址1地址2协议域名端口是否跨域
http://web.a.com/index.htmlhttp://web.a.com/page.html相同相同相同否
http://web.a.com/index.htmlhttp://web.b.com/page.html相同不同相同是
http://web.a.com:8080/indexhttp://web.a.com:8081/index相同相同不同是
http: //web.a.com/index.htmlhttps: //web.a.com/page.html不同相同相同是

2. postMessage()语法

otherWindow.postMessage(message, targetOrigin, [transfer]);
  • otherWindow
    其他窗口的一个引用,写的是你要通信的window对象。
    例如在iframe中向父窗口传递数据时,可以写成window.parent.postMessage(),window.parent表示父窗口。
  • message
    需要传递的数据,字符串或者对象都可以,对象需要序列化(JSON.parse()),详细用法请转到:https://blog.youkuaiyun.com/github_38336924/article/details/96423264
  • targetOrigin
    表示目标窗口的源,协议+域名+端口号,如果设置为“ * ”,则表示可以传递给任意窗口。
// 可以传递给任意窗口
window.parent.postMessage('hello world','*');

在发送消息的时候,如果目标窗口的协议、域名或端口这三者的任意一项不匹配targetOrigin提供的值,那么消息就不会被发送;只有三者完全匹配,消息才会被发送。

// 只有父窗口为 http://web.a.com/index.html 接收到消息 
window.parent.postMessage('hello world','http://web.a.com/index.html');
  • 发送消息
window.parent.postMessage('hello world','http://web.a.com/index.html');
  • 接收消息
window.addEventListener("message", receiveMessage, false);
function receiveMessage(event)
{
	console.log(event.data)  //event.data为传递过来的数据
    console.log(event.origin)  //event.origin为调用 postMessage 时消息发送方窗口的 origin(域名、协议和端口)
    console.log(event.source)  //event.source为对发送消息的窗口对象的引用,可以使用此来在具有不同origin的两个窗口之间建立双向通信
}

3. demo

3.1 子窗口 一> 父窗口传递信息

  • 子窗口 code
//子页面向父级页面传递信息
window.onload = function() {
    window.parent.postMessage({  //与父级页面通讯方法
    type: "onload",              //父级接收的信息 
    data:"do something"         //如果传递的信息为object(数组或者json格式)需要转换成字符串
  }, '*');
}
 
 
//子页面接收信息 与父页面接收信息相同
window.addEventListener("message", receiveMessage, false);
function receiveMessage(event)
{
	console.log(event);
}
  • 父窗口 code
window.addEventListener("message", receiveMessage, false);
function receiveMessage(event)
{
	console.log(event);
}

3.2 父窗口 一> 子窗口传递信息

  • 父窗口 code
// 父页面向子页面传递信息 contentWindow.postMessage方法与window.postMessage相似
var iframe=document.getElementById("iframe");
iframe.contentWindow.postMessage({
    type: "set",
    content:"hello world"
}, "*");

//父页面接收信息 与子页面接收信息相同
window.addEventListener("message", receiveMessage, false);
function receiveMessage(event)
{
	console.log(event);
}
  • 子窗口 code
// 子页面接收信息
window.addEventListener("message", receiveMessage, false);
function receiveMessage(event)
{
	console.log(event);
}
记一次:iframe嵌套网页,利用window.postMessage()实现子父窗口相互传值 文章已移动至此地址 **场景需要:** http://a.com -父页面,记做A http://b.com -子页面,记做B B生成的DOM,获取DOM的属性,传到A A监听事件,获取监听的属性,传到B ## 正文 ## 利用window.postMessage() 方法可以安全地实现跨源通信。通常,对于两个不同页面的脚本,只有当执行它们的页面位于具有相同的协议(通常为https),端口... 阅读详情

相关推荐

用VASP计算GW+BSE

VASP在5.3以后的版本都能用解BSE方程的方法,在计算光吸收的过程中考虑激子效应。 下面就来写一个用BSE计算bulkSi的例子 首先,介电函数的计算是在GW计算的基础之上的。这里首先介绍G0W0的计算(我们这里直接在PBE的波函数基础上进行G0W0计算)。 1.PBE自恰计算,写WAVECAR System= Silicon groundstate occupied

ultra1989的专栏 2万+

iframe嵌套页面 跨域_跨域解决方案

点击上方蓝色“后端开发杂谈”关注我们, 专注于后端日常开发技术分享上一篇文章跨域资源共享我们讲到了, 在跨域访问的时候出现的问题, 以及基于跨域共享的方案解决跨域的问题, 那么还有没有其他的技术手段解决跨域的问题呢, 本篇文章一一列举解决跨域问题的所使用的技术手段.跨域通信的解决手段大致分为两类:一类是 Hack. 比如通过title,navigation等对象传递信息. JSON...

weixin_39616880的博客 5820

Vivado IP核与约束文件管理指南:解决OOC警告、COE文件丢失与Block Design复用

本文详细介绍了Vivado IP核与约束文件管理的系统化方法,包括解决OOC警告、COE文件丢失与Block Design复用等常见问题。通过IP核锁定机制、分层约束架构和动态约束技术,提升FPGA工程的健壮性和团队协作效率,特别适合中大型项目开发。

weixin_30887919的博客 430

iframe嵌套页面 跨域_跨域

同源策略同源策略是浏览器的一个安全功能,不同源的客户端脚本在没有明确授权的情况下,不能读写对方的资源。比如说http://a.com下面的脚本不能读取http://b.com接口里面的数据。同源指的是:协议相同域名相同端口相同对于域名:http://a.com:8080https://a.com:8080 不同源 协议不相同http://a.com:8081 不同源 端口不相同http://b.c...

weixin_39923599的博客 3975

大众奥迪诊断不求人:手把手解析SAE J2819(CAN TP2.0)协议报文与连接流程

本文深入解析大众奥迪车型诊断核心标准SAE J2819(CAN TP2.0)协议,详细拆解连接建立流程与报文控制字段。通过实战案例展示通道设置、参数协商等关键步骤,提供诊断设备配置建议和常见故障排查技巧,帮助工程师掌握汽车诊断通信协议的精髓。

weixin_30421809的博客 396

Matterport3D数据集介绍与下载(全网最详细)

Matterport3D数据集介绍与下载(全网最详细)

shannanshouyin的博客 2165

通过iframe嵌入三方系统时遇到的跨域问题及解决方案

总结在iframe嵌入第三方系统时遇到的跨域访问问题

_老逄 2万+

量子城域网建设设备系列(三):网络管理系统(NMS)

本文对量子网络中的网络管理系统进行了初步的介绍。

量子领域相关话题 2012

【前端学习】iframe标签以及postMessage解决iframe中的跨域问题

iframe>是html的一个行内块级元素,像行内元素一样会在一行中水平排列,又可以像块元素一样设置宽高。<iframe>用于在一个网页中嵌入另一个网页<iframe>默认有宽高(根据浏览器样式设定,通常:width300px height150px),存在边界src:指定内联网页地址;:设置为0可以清除iframe的边界(已过时)可通过样式修改:width: 宽height:高scrolling:是否可滚动—yesnoauto(根据页面内容)

weixin_45626095的博客 3265

2023东华大学机试OJ进阶版1-81题

先排序。每次找两个最小的数,把其中一个置为两数之和,并累加这个和值,另一个数置为-1,然后再排序,重复操作,直到只剩下一个数。105。

m0_49263811的博客 2795

iframe: 通过postMessage实现父子页面通信

在前端开发中,跨域是一个常见的问题,由于同源策略的限制,浏览器不允许在不同源的页面之间直接进行通信。解决跨域问题有多种方式,其中一种常用的方式是使用postMessage。它是HTML5引入的一种跨文档通信的机制,可以在不同的窗口或框架之间传递数据,即使这些窗口或框架不属于同一个源。本文将介绍改方法的使用与场景

qq_45796592的博客 2743

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

js 同源页面间通信 storage 和跨域页面间通信 postMessage

同源页面间通信,storage事件监听介绍使用扩展跨域页面间通信 postMessage介绍使用安卓平台差异化处理安全问题 同源页面间通信,storage事件监听 参考博客:h5 storage事件监听 介绍 当同源页面的某个页面修改了localStorage,其余的同源页面只要注册了storage事件,就会触发,所以满足触发监听的条件有三个: 同一浏览器打开了两个同源页面 其中一个网页修改了localStorage 另一网页注册了storage事件 注意:在同一个网页修改本地存储,又在同一个网页监听,.

haogemr的博客 5096

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

iframe通信方法 传递数据 window.postMessage的使用

我们在开发过程中,会遇到有需求,在A页面中嵌套一个iframe的B页面,B页面需要发消息给A页面,A页面接收消息,做出相应的处理。这时我们就需要postMessage和addEventListener进行配合使用 用法 window.postMessage(message, targetPage, [transfer]) message: 将要发送到其他 window的数据 targetPage:通过窗口的origin属性来指定哪些窗口能接收到消息事件,其值可以是字符串"*"(表示无限制)或者一个URI。

weixin_42362496的博客 1932

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

postMessage解决跨域和跨页面通信

postMessage解决跨域和跨页面通信1.多窗口之间消息传递(newWin = window.open(..));2.页面与嵌套的iframe消息传递postMessage(data,origin)方法接受两个参数同域父子页面间通讯跨域父子页面间通讯 1.多窗口之间消息传递(newWin = window.open(…)); 2.页面与嵌套的iframe消息传递 postMessage(dat...

qq_20272457的博客 454

同域和跨域页面通信方法

一、同域下页面之间的通信 该条件下实现的方式比较多,先列举几种典型的方法,然后举例说明其中几种。 1、iframe标签可以嵌套另一个标签,并且可以通过js去访问被包含的页面的window对象,从而操作该页面下documentElement; 2、使用H5中的webstorage来实现,利用localeStorage和sessionStorage存储进行数据通信; 3、使用cookie,读取相同域名下的cookie值来进行通信; 4、Window.name通信。(有专门的文章进行讲解) 例子1:有一个源窗口

Bliss_妍的博客 2006

postmessage封装跨域消息传递

第一部分 postMessage消息传递 CD.html &lt;div style="width:200px; float:left; margin-right:200px;border:solid 1px #333;"&gt; &lt;div id="color"&gt;Frame Color&lt;/div&gt; &lt;/div&gt; &lt;div&gt; &

hellowXDW的博客 1594

跨域的总结

实习偶然碰到了一个未接触过的跨域解决方案,查些资料有一个总体了解

weixin_72552097的博客 1943

iframe js 加载失败_js处理的8种跨域方法

这里说的js跨域是指通过js在不同的域之间进行数据传输或通信,比如用ajax向一个不同的域请求数据,或者通过js获取页面中不同域的框架中(iframe)的数据。只要协议、域名、端口有任何一个不同,都被当作是不同的域。特别注意两点:#1、如果是协议和端口造成的跨域问题“前台”是无能为力的;#2、在跨域问题上,域仅仅是通过“URL的首部”来识别而不会去尝试判断相同的ip地址对应着两个域或两个...

weixin_42638139的博客 1800

iframe的跨域通信(代码示例)

通过这种方式,我们就可以在不同源的页面之间进行通信。在前端开发中,我们经常会使用iframe来嵌套其他网页或者同域的页面。使用window.name方式在iframe中可以通过修改window.name来向父页面传递数据,而在父页面中可以通过访问iframe的contentWindow.name来获取到这个值。使用location.hash方式在iframe中可以通过修改location.hash来向父页面传递数据,而在父页面中可以通过监听hashchange事件来获取到这个值。

jingdianjiuchan的博客 1441

实现iframe嵌套页面通信

实现iframe嵌套页面通信 在项目中通过iframe标签嵌入其他网页时,该如何iframe页面进行通信呢?小菜鸡在这里简单记录一下~ 1、父组件获取子组件: (注:父组件是当前项目页面,子组件是iframe标签) Iframe.contentWindow:获取iframe的window对象 Iframe.contentDocument:获取iframe的document对象 当需要从当前页面传递数据给嵌入的iframe页面时,可通过postMessage()方法进行通信。 iframe.contentWi

start_sea的博客 3704

iframe跨域导致的高度自适应问题一网打尽

1、什么是iframe跨域导致的高度自适应问题 网页A中嵌套了iframe页面B,如果A和B不在同一个域名下,就形成跨域,两者之间的通信就会受到浏览器的某种限制。一种十分常见的场景是,A需要知道B的高度值以确定iframe的高度,由于跨域的限制,A又不能通过dom直接地读到B的高度。这就是常见的iframe高度自适应问题。 如何界定是否同域呢?只有域名和端口号都相同时,才算是同域。比如

xjllsgs的专栏 1305

iframe 跨越访问_新手学跨域之iframe

页面嵌套iframe是比较常见的,比如QQ相关业务页面的登录框一般都是iframe的。使用ifrmae跨域要满足一个基本条件,父页面和子页面都是自己可以控制的,如果随便把iframe指向一个其他网站,想通过跨域手段操作它基本上是不可能的。document.domaindocument.domain是比较常用的跨域方法。实现最简单但只能用于同一个主域下不同子域之间的跨域请求,比如 foo.com 和...

weixin_34135180的博客 579

子iframe通过a标签跳转到父页面_记一次:iframe嵌套网页,利用window.postMessage()实现子父窗口相互传值(转)...

场景需要:B生成的DOM,获取其属性,传值到AA监听事件,获取监听的属性,传到B正文利用window.postMessage() 方法可以安全地实现跨源通信。通常,对于两个不同页面的脚本,只有当执行它们的页面位于具有相同的协议(通常为https),端口号(443为https的默认值),以及主机 (两个页面的模数 Document.domain设置为相同的值) 时,这两个脚本才能相互通信。windo...

weixin_33712536的博客 497
上一篇: 5 种JavaScript编码规范
下一篇: Promise
dadeity
博客等级 码龄10年 1172粉丝 225原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

dadeity

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值