HTML5 Cross-Document Messaging 跨域(postMessage)

postMessage和onmessage Cross-document messaging 解决了在网页文档之间互相接收与发送信息的功能问题。 由于同源策略的限制,JavaScript 跨域的问题,一直是一个颇为棘手的问题。HTML5 提供了在网页文档之间互相接收与发送信息的功能。使用这个功能,只要获取到网页所在窗口对象的实例,不仅同源(域 + 端口号)的 Web 网页之间可以互相通信,甚至可以实现跨域通信。 要想接收从其他窗口发送来的信息,必须对窗口对象的 onmessage 事件进行... 阅读详情

前言

出于安全和隐私的原因,Web浏览器会阻止不同域中的文档互相影响; 也就是说,跨站点脚本是不允许的。但很多时候需要跨域操作,因此开发出允许跨域方法document.domain,JSONP,CORS等。这些跨域方式都有一定的局限性,比如我最近遇到一个跨域问题,我在www.A.com域打开一个www.B.com域的网页,需要B网址操作完成后,前端通知A网址。上面这些方法都不能有效地跨越通信。

而这是我查看文档,发现HTML5提供了一种新的跨域方法 称为跨文档通信(cross-document messaging),这是作用于网页之间互相通信与发送信息的功能。使用这个功能,只要获取到网页所在窗口对象的实例,不仅同源(域 + 端口号)的 Web 网页之间可以互相通信,甚至可以实现跨域通信。 要想接收从其他窗口发送来的信息,必须对窗口对象的 message 事件进行监听,其它窗口可以通过 postMessage 方法来传递数据。
这里写图片描述

用法

1.前提A域名使用window.open打开B域名站点。
2.B域名发送一个信息“HI”给”http://www.A.com“。

var targetWindow = window.opener;
targetWindow.postMessage("HI", "http://www.A.com");

3.A域接收消息后,分析是”http://www.B.com“传来的 传回去”I’m fine”,给”http://www.A.com“。

window.addEventListener('message', receiver, false);
function receiver(e) {
  if (e.origin == "http://www.B.com") {
    if (e.data == "HI") {
      e.source.postMessage("I'm fine", e.origin);
    } 
  }
}


发送信息-postMessage

postMessage负责发送信息,向给定窗口发布消息。消息可以是结构化对象。

postMessage(data,origin)方法接受两个参数:

字段介绍
data要传递的数据,html5规范中提到该参数可以是JavaScript的任意基本类型或可复制的对象,然而并不是所有浏览器都做到了这点儿,部分浏览器只能处理字符串参数,所以我们在传递参数的时候需要使用JSON.stringify()方法对对象参数序列化,在低版本IE中引用json2.js可以实现类似效果。
origin字符串参数,指明目标窗口的源,协议+主机+端口号[+URL],URL会被忽略,所以可以不写,这个参数是为了安全考虑,postMessage()方法只会将message传递给指定窗口,当然如果愿意也可以建参数设置为”*”,这样可以传递给任意窗口,如果要指定和当前窗口同源的话设置为”/”。

例子

window.opener.postMessage(“HI”, “http://www.A.com“);
//这样 发送一个“HI”给 A 信息了。


接收事件-message

window新事件message,负责接送信息。通过发布一个message方法来,接听其网站的信息。postMessage(message,targetOrigin [,transfer ])

window.addEventListener(‘message’, function(e){console.log(e)}, false);
//这是一个接收器 接收信息输出。

window.attachEvent(‘message’, function(e){console.log(e)}, false);
//IE9以下使用attachEvent

接收的对象用下面属性。

其中有几个重要属性

字段介绍
data接收message传递过来的值,值的类型是字符串形式。
source发送消息的窗口对象。
origin发送消息窗口的源(协议+主机+端口号)。

安全性

使用此API需要格外小心,因为这个是开方一个入口,允许大家来发送信息。

因此使用message应该设置好origin属性,以确保允许的域的信息。避免给其他恶意网址来利用攻击。

还有postMessage() 也要设置好origin,这样避免信息未经授权而被其他网站接收。不建议设置(*)

攻击者可以发送大量的消息; 如果接收页面执行昂贵的计算或导致为每个此类消息发送网络流量,则攻击者的消息可能会成倍增加,从而导致拒绝服务攻击。鼓励采用速率限制(每分钟只接受一定数量的消息)以使这种攻击不切实际。

兼容性

Chrome浏览器 64+
Chrome 4+
iOS Safari 3.2+
UC浏览器Android 11.8+
Firefox 3+
IE浏览器(限定) 8+
三星Internet 4+
Opera Mini 全部+
Safari 4+
Edge 12+
Android Browser 2.1 +
Opera 9.5+
来源:caniuse.com

注意事件

1.Cross-Document Messaging适合对窗口来互相传值使用,但如果要做页面跳转会被浏览器安全限制的。(IE浏览器限制不能别其他域来跳转)
2.使用需要清晰知道窗口关系,这样才能正确传递值。

iframe例子

父级页面A


function receiver(e) {
  if (e.origin == "http://www.B.com") {
    if (e.data == "HI") {
      e.source.postMessage("I'm fine", e.origin);
    } 
  }
}

try{
    window.addEventListener('message', receiver, false);
}catch(e){
    window.attachEvent('message', receiver, false);
}

子级页面B

    window.parent.postMessage("HI", "http://www.A.com");
跨文档消息传递(Cross-Document Messaging)在H5中的实现 跨文档消息传递(Cross-Document Messaging)是一种在HTML5中引入的机制,它允许不同的文档(窗口、标签页或iframe)之间安全地传递消息。通过指定目标窗口的引用和目标窗口的源,我们可以确保消息只发送给预期的窗口。该方法允许我们指定目标窗口、消息内容和接收消息的窗口的源。例如,我们可以在窗口之间传递JSON格式的数据,并根据消息内容执行不同的操作。需要注意的是,为了确保安全性,我们在接收消息时进行了源验证(event.origin)和窗口验证(event.source)。 阅读详情

相关推荐

HTML5地理位置与通信API的实践应用

本文深入探讨了HTML5 Geolocation API和Cross Document Messaging的实际应用。我们了解到地理位置API如何通过经纬度等属性提供位置信息,并通过设置timeout值来优化用户体验。同时,介绍了如何将位置信息展示在谷歌地图上,以及Cross Document Messaging如何安全地实现跨源通信,包括postMessage API的使用和消息验证的最佳实践。

weixin_29138345的博客 367

HTML5中的跨文档消息传递

跨文档消息传送(cross-document messaging),有时候也简称为XDM,指的是来自不同域的页面间传递消息。例如,www.w3cmm.com域中的一个页面与一个位于内嵌框架中的p2p.w3cmm.com域中的页面通信。在XDM机制出现之前,更稳妥地实现这种通信需要花很多功夫。XDM把这种机制规范化,让我们能既稳妥有简单地实现跨文档通信。 XDM的核心是postMessage()方...

weixin_33757911的博客 410

ADS2016子电路封装避坑指南:手把手教你制作可复用的自定义Symbol

本文详细介绍了在ADS2016中制作可复用的自定义Symbol的全流程,重点解析了子电路封装的常见问题与解决方案。从电路模块的标准化处理、Hierarchy创建技巧到Symbol视觉优化和库管理策略,帮助工程师提升射频与微波电路设计效率。特别针对Symbol比例适配和引脚优化等核心问题,提供了实用的避坑指南和工程验证方法。

weixin_30275415的博客 207

HTML5的一些问题

陶国荣 回答于 2012-02-27 21:48 (昨天(21:48)) 举报 引用来自“Sephiroth”的答案 1.基于html5,如果往应用层发展,浏览器之间的问题如何解决呢,是针对单一浏览器还是兼容?如果兼容的话,是不是会影响特色的功能? 2.就现阶段来说,使用html5来升级网站,是否有必要呢?是不是有点操之过急? 3.html5运行在

技术成就梦想,知识改变命运 ! 673

XPe开发初体验(一)XPe概述

XP Embedded是微软Windows Embedded产品线中非常重要的一环,不过比起大名鼎鼎的Windows Embedded CE,XPe显得过于低调了。在接下来的一段时间里,我希望能够用六篇的篇幅来描述一下XPe的整个开发过程。这个系列文章主要是针对有Windows编程经验,但是没有嵌入式开发经验的开发者,提供一些概念和开发过程的初步介绍。XP Embedded是一个基于Windo

aawolf = new Mobile.MVP 1万+

【芯片验证随心记】1.SystemVerilog中,rand和randc的区别?如何用constraint实现randc?

在SystemVerilog里,randc 的“不重复循环”特性是用一个 周期性排列器(permutation engine) 实现的,而这个引擎在 LRM 里并没有公开。我们只能在 “用户空间” 用 rand + constraint 去模仿它的行为。每次随机化只取 queue.pop_front(),用完再洗。在4次随机化内,y会依次出现0,1,2,3各一次(顺序随机)每次随机化,x可能是0-3中的任意值,可能连续多次相同。每次随机化时,在未使用的值里随机挑一个;第5次随机化时,重新生成新的排列周期。

qq_43172512的博客 342

浅谈WEB跨域的实现(前端向)

同源策略/SOP(Same origin policy)是一种约定,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,浏览器很容易受到XSS、CSFR等攻击(可以参考我的这篇文章)。 SOP要求两个通讯地址的协议、域名、端口号必须相同,否则两个地址的通讯将被浏览器视为不安全的,并被block下来。比如“http页面”和“https页面”属于不同协议;“qq.com”、“www.q...

dcof99817的博客 246

人工蜂群优化算法(ABC)详解:原理、实现与应用

人工蜂群算法(Artificial Bee Colony, ABC)是Karaboga于2005年提出的一种群体智能优化算法,其灵感来源于蜜蜂群体在自然界中高效的采蜜行为。该算法通过模拟雇佣蜂、观察蜂和侦察蜂三种角色的分工协作来寻找最优解。在ABC算法中,每个潜在的解决方案被视为一个“食物源”,其质量由适应度函数评估。雇佣蜂负责在已知优质食物源附近进行局部开采;观察蜂根据雇佣蜂分享的信息,以一定概率选择并跟进优质食物源;侦察蜂则随机探索新区域,防止种群陷入局部最优。

qq_42212808的博客 393

javascript基础学习系列四百九十一:跨上下文消息

跨文档消息,有时候也简称为 XDM(cross-document messaging),是一种在不同执行上下文(如不 同工作线程或不同源的页面)间传递信息的能力。例如,www.wrox.com 上的页面想要与包含在内嵌窗 格中的 p2p.wrox.com 上面的页面通信。在 XDM 之前,要以安全方式实现这种通信需要很多工作。XDM 以安全易用的方式规范化了这个功能。XDM 的核心是 postMessage()方法。

wanmeijuhao的博客 758

《一》:LBE,VR 大空间系列——场景环境需求解析

当前,大量 VR 体验活动在室内场地开展。因此,对于场地照明有特定要求:除天花板外,场地的所有表面均需有照明覆盖。这是为了保证玩家无论处于场地的哪个位置,地面与墙面都不会出现明显的影子。场地内不建议安装射灯或高强度的点光源,若已安装此类灯具,需使用柔光板进行遮盖。此外,要避免在阳光下使用 VR 设备台。参考图(请忽略其中Maker标签)

unitygroup的博客 942

行为预测模型:Social LSTM与Graph Neural Networks

行为预测模型:Social LSTM与Graph Neural Networks ,人工智能,计算机视觉,大模型,AI,本文围绕行为预测模型Social LSTM与Graph Neural Networks展开,介绍了两者的基础概念、原理、应用场景,还对比了它们在优势、劣势和适用场景上的不同,最后给出了相应的代码示例。Social LSTM基于LSTM,通过社交池化层处理多智能体交互;图神经网络处理图结构数据,靠消息传递获取信息,二者各有侧重,适用于不同场景。

不踩坑,不知道坑有多深;不总结,踩过的坑白踩。 15万+

同域和跨域页面通信方法

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

Bliss_妍的博客 2006

SAP_SD模块路径及运输功能后台配置简介

后台路径:SPRO—后勤执行—装运—基本发运功能—定义路线—定义传输模式根据实际运输过程运输地理的类型:海运、公路运输、空运后台路径:SPRO—后勤执行—装运—基本发运功能—定义路线—定义发运类型根据实际运输过程运输方式:汽车、卡车、火车、轮船、飞机后台路径:SPRO—后勤执行—装运—基本发运功能—路径—定义路线—定义运输连接点指在运输过程中需要中转的地区可以维护中转地区的停留的时间后台路径:SPRO—后勤执行—装运—基本发运功能—路径—定义路线—定义路径和阶段。

我小时候很黑的博客 1395

使用HTML5 的跨域通信机制进行数据同步

离线应用系统的设计目标就是在网络离线情况下依然可以操作我们的应用系统,并在网络畅通的情况下与服务器进行数据交互。  所以离线应用系统最终会做成类似C/S架构的客户端应用程序。这边基于Chrome或者 Safari浏览器的 Web Application(Web 应用程序插件)无疑是最好的选择。  这边以Chrome 的 Web Application 为例,离线系统做成Web 应用程序

吃豆豆的博客 928

多标签图像分类:标签依赖关系建模的最新论文解读与实战应用

多标签图像分类:标签依赖关系建模的最新论文解读与实战应用 ,人工智能,计算机视觉,大模型,AI,本文解读了最新相关论文,包括基于图神经网络(GCN)的ML-GCN方法,通过构建标签相关矩阵建模依赖关系;区域潜在语义依赖的RLSD模型,定位关键区域并利用RNN建模语义依赖;以及语义图表示学习的SSGRL框架,结合语义解耦与交互模块。通过实战应用,展示了基于PyTorch的ML-GCN模型实现,包括图像特征提取、标签依赖建模及训练评估流程,为多标签图像分类提供了有效解决方案。

不踩坑,不知道坑有多深;不总结,踩过的坑白踩。 18万+

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

HTML5 postMessage 和 onmessage API 具体应用

HTML5 postMessage 和 onmessage API 具体应用 随着 HTML5 的发展。了解并熟悉 HTML5 的 API 接口是很重要的。postMessage(send) 和 onmessage 此组 API 在 HTML5 中有着广泛的应用,比方 Web Workers 中应用此组 API 实现多个线程间 JavaScri...

weixin_33973609的博客 199

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

HTML5 postMessage 和 onmessage API 详细应用

HTML5 postMessage 和 onmessage API 详细应用 在学习HTML5的时候发现一位大神的博文,解决了个人的很多疑惑,转载分享给大家 原文地址:https://www.cnblogs.com/sugar-tomato/p/4497108.html 以下是原文: 随着 HTML5 的发展,了解并熟悉 HTML5 的 API 接口是非常重要的。postMessage(send) 和 onmessage 此组 API 在 HTML5 中有着广泛的应用,比如 Web Workers 中应用此

weixin_46683645的博客 612

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

javascript 跨域访问

JavaScript出于安全方面的考虑,不允许跨域调用其他页面的对象。因为同源策略的限制,a.com 域名下的js无法操作b.com或是c.a.com域名下的对象。 下表给出了相对http://site.baidu.com/file/index.html同源检测的示例: 序号URL结果原因 1 http://site.baidu.com/file...

138

HTML5 中 postMessage sendMessage使用

Web Workers 简介 至 2008 年 W3C 制定出第一个 HTML5 草案开始,HTML5 承载了越来越多崭新的特性和功能。它不但强化了 Web 系统或网页的表现性能,而且还增加了对本地数据库等 Web 应用功能的支持。其中,最重要的一个便是对多线程的支持。在 HTML5 中提出了工作线程(Web Workers)的概念,并且规范出 Web Workers 的三大主要特征:能够长

巴黎的妖 4600

HTML5-web通信之 Cross-Document Messaging(XDM) & Channel Messaging

在学习跨域,转载几篇好的博客,以后有深刻理解再自己总结吧。 HTML5 web通信(跨文档通信/通道通信)简介 by zhangxinxu from http://www.zhangxinxu.com 本文地址:http://www.zhangxinxu.com/wordpress/?p=2229 一、简单概要 web通信(洋名:web messaging)是一种文档中独立的浏览

柒青衿的博客 1570

跨域-跨域文档消息传递(cross-document messaging XDM)

  跨文档消息传送(cross-document messaging),有时候也简称为XDM,指的是来自不同域的页面间传递消息。例如,www.w3cmm.com域中的一个页面与一个位于内嵌框架中的p2p.w3cmm.com域中的页面通信。在XDM机制出现之前,更稳妥地实现这种通信需要花很多功夫。XDM把这种机制规范化,让我们能既稳妥有简单地实现跨文档通信。  XDM的核心是postMessage(...

前端小渣 944

HTML5-Cross Document Messaging APIs

1.概述 HTML5 Cross Document Messaging是为了便于在不同源地址的页面间或是页面、浏览器的窗口、tab、iframe等间传递数据和信息。其核心是window.postMessage(data, origin)方法和message事件。 postMessage的第一个参数是要传递的数据,第二个参数是数据的来源(例如一个URL)。message事件处理程序通常会有一...

weixin_34354945的博客 86

HTML5 的message的使用

HTML5接口中的postMessage()和onmessageAPI 比如WebWorkers,js提供了多线程的功能,它实现多线程间JavaScript调用的功能 Cross-document messaging, 实现了两个不同域间JavaScript调用 WebSockets, Server-Sent Event原文地址WebWorker//WebWorker为前端网页提供了在后台中运

tyust512的专栏 3065

postMessage

HTML5 postMessage 和 onmessage API 详细应用 姜 俊杰2013 年 1 月 10 日发布 WeiboGoogle+用电子邮件发送本页面 0 Web Workers Web Workers 简介 至 2008 年 W3C 制定出第一个 HTML...

weixin_30906425的博客 280

JavaScript:HTML5跨文档消息传递(postMessage)

      跨文档消息传送(cross-document messaging),有时候也简称为XDM,指的是来自不同域的页面间传递消息。例如,www.w3cmm.com域中的一个页面与一个位于内嵌框架中的p2p.w3cmm.com域中的页面通信。在XDM机制出现之前,更稳妥地实现这种通信需要花很多功夫。XDM把这种机制规范化,让我们能既稳妥有简单地实现跨文档通信。        XDM的核心是p...

山水子农 5220
上一篇: nginx把线上服务静态资源映射本地目录
下一篇: Iphone X HTML 齐刘海 过招篇
JarunWang
博客等级 码龄18年 57粉丝 61原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值