千家信息网

HTML5中的Communication API怎么使用

发表于:2026-11-04 作者:千家信息网编辑
千家信息网最后更新 2026年11月04日,本篇内容介绍了"HTML5中的Communication API怎么使用"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅
千家信息网最后更新 2026年11月04日HTML5中的Communication API怎么使用

本篇内容介绍了"HTML5中的Communication API怎么使用"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

1.跨文档消息通信

跨文档消息通信可以确保iframe、标签页、窗口间安全地进行跨源通信。它把postMessage API定义为发送消息的标准方式。利用postMessage发送消息非常简单,代码如下所示:

chatFrame.contextWindow.postMessage('Hello,world','http://www.example.com');

接收消息时仅需在页面种增加一个事件处理函数。当某个消息到达时,通过检查消息的来源来决定是否对这条消息进行处理。

消息事件是一个拥有data(数据)和origin(源)属性的DOM事件。data属性是发送方传递的实际消息,而origin属性是发送来源。

postMessage API不仅可以胜任同源文档间的通信,而且在浏览器不允许非同源通信的情况下,postMessage API也很有用。鉴于它的一致性和易用性,在同源文档间通信时也推荐使用postMessage。在JavaScript环境的通信中始终应使用postMessage API,例如使用HTML5 Web Worker通信时。

1.1 理解源安全

HTML5荣光引入源(origin)的概念对域安全进行了阐明和改进。源是在网络上用来建立信任关系的地址的子集。源由规则(scheme)、主机(host)、端口(post)组成。

源的概念中不考虑路径。

HTML5定义了源的序列化。源在API和协议中以字符串的形式出现。

postMessage的安全规则确保了消息不会被传递到非预期的源页面中。当发送消息时,由发送方制定接收方的源。如果发送方用来调用postMessage的窗口不具有特定的源(例如用户跳转到了其他站点),浏览器就不会传送消息。

类似地,接受消息的时候,发送方的源也被作为消息的一部分。为避免伪造,消息源由浏览器提供。接收方可以决定处理哪些消息,以及忽略哪些消息。我们可以保留一份白名单,告诉浏览器仅仅处理可信源的消息。

最好永远不要对来自第三方的字符串求值。再者,要避免使用eval方法处理应用内部字符串。可以通过window.JSON或者json,.org解析器使用JSON。

1.2 跨文档消息通信的浏览器支持情况

常用的做法是检测XMLHttpRequest对象中是否存在withCredentials属性:

JavaScript Code复制内容到剪贴板

  var xhr = new XMLHttpRequest(); if (typeof xhr.withCredentials === undefined) { //不支持跨源的XMLHttpRequest } else { //支持跨源的XMLHttpRequest }

1.3 使用postMessage API

提示 HTML5定义的MessageEvent接口也是HTML5 WebSockets和HTML5 WebWorkers的一部分。HTML5的通信功能用用于接受消息的API与MessageEvent接口是一致的。其他通信类API,如EventSource API和Web Workers,也都是使用MessageEvent接口来传递消息。

1.4 使用postMessage API创建应用

发送消息

  通过调用目标页面window对象中的postMessage()函数可发送消息,代码如下:

JavaScript Code复制内容到剪贴板

window.postMessage("Hello, world", "porta");

  第一个参数包括要发送的数据,第二个参数是消息传送的目的地。要发送消息给iframe,可以再相应iframe的contentWindow中调用postMessage,代码如下:

JavaScript Code复制内容到剪贴板

document.getElementsByTagName("iframe")[0].contentWindow.postMessage("Hello, world", "cha");

监听消息事件

  接收消息时仅需在页面中增加一个事件处理函数。当某个消息到达时,通过检查消息的来源来决定是否对这条消息进行处理。

JavaScript Code复制内容到剪贴板

window.postMessage("Hello, world", "porta");

  消息事件是一个拥有data(数据)和origin(源)属性的DOM事件。data属性是发送方传递的实际消息,而origin属性是发送来源。

  源由规则(scheme)、主机(host)、端口(port)组成。

  例如:由于规则不同(如https与http),所以页面与页面的源是不同的。

  源的概念中不考虑路径。如:与只是路径不同,他们是相同的源。

  源在API和协议中以字符串的形式出现。

JavaScript Code复制内容到剪贴板

var originWhiteList = ["porta", "game", ""]; function checkWhiteList(origin) { for (var i=0; i

  postMessage API可以适用于同源和非同源通信,鉴于它的一致性,在同源文档间通信时也推荐适用postMessage。

2 XMLHttpRequest Level2

作为XMLHttpRequest的改进版,XMLHttpRequest Level2在功能上有了很大的改进。主要集中在两个方面:

(1)跨源XMLHttpRequests;

(2)进度事件(Progress events)

2.1 跨源XMLHttpRequst

XMLHttpRequestLevel2通过CORS(Cross Origin Resource Sharing,跨源资源共享)实现了跨源XMLHttpRequests。

跨源HTTP请求包括一个Origin头部,拓为服务器提供HTTP请求的源信息。头部由浏览器保护,不能被应用程序代码修改。从本质上讲,它与跨文档消息通信中消息事件的origin属性作用相同。

CORS规范要求,对一些敏感行为——如申请证书的请求或除了GET和POST以外的OPTIONS预检(preflight)请求,必须由浏览器发送给服务器,以确定这种行为能否被支持和允许,这意味着成功通信的背后或许需要由具备CORS出了能力的服务器来支持。

2.2 进度事件

新版XMLHttpRequest中最重要的API改进之一是增加了对进度的响应。

XMLHttpRequest Level2用了一个有意义的名字Progress进度来命名进度事件。

3 进阶功能

3.1 结构化的数据

早期版本的postMessage仅支持字符串。后来的版本支持JavaScript对象、canvas imageData和文件等其他数据类型。由于不同浏览器对规范支持的差异,对不同的对象类型的支持情况也不同。

3.2 Framebusting

Framebusting技术可以用来保证某些内容不被加载到jframe中。应用程序首先检测其所在的窗口是否为最外层的窗口(window.top),若不是则跳脱包含它的框架,代码如下所示:

JavaScript Code复制内容到剪贴板

if(window!=window.top)

{

window.top.location=location;

}

3.3二进制数据

  支持新的二进制API(如Typed Array)的浏览器可以用XMLHttpRequest来发送二进制数据。Level 2规范支持调用send()方法发送Blob和ArrayBuffer对象

XML/HTML Code复制内容到剪贴板

var a = new Uint8Array([8,6,7,5,3,0,9]); var xhr = new XMLHttpRequest(); xhr.open("POST", "/data/", true); console.log(a); xhr.send(a.buffer);

  XMLHttpRequest Level 2也会公开二进制响应数据。将responseType属性值设置为text、document、arraybuffer或blob来控制 有response属性返回的对象类型。如果想要查看HTTP响应体包含的原始字节,需要将responseTyper属性值设为arraybuffer或blob。9685

"HTML5中的Communication API怎么使用"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注网站,小编将为大家输出更多高质量的实用文章!

消息 通信 事件 属性 支持 内容 浏览器 浏览 数据 剪贴板 文档 剪贴 处理 不同 对象 页面 同源 代码 字符 字符串 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 为想互联网科技怎么样 新华互联网科技学校 科技金融是不是互联网金融 互联网核心科技是什么 盈实互联网科技 互联网科技资迅 贷财互联网科技 互联网科技视频素材 左右互联网络科技 滨湖区互联网智能科技产品供应 深圳前海聚择互联网科技有限公司 深圳市优智互联网科技有限公司 区块链结合互联网科技 沐思想互联网科技有限公司 北京市互联网新科技 电子商务与互联网科技的关系 半导体行业属于互联网高科技类吗 九思连强互联网电子科技有限公司 世界互联网科技成果奖 互联网界的黑科技 互联网金融科技 保险科技 互联网保险 互联网科技工作委员会 互联网巨头反垄断金融科技 汉立互联网科技有限公司联系电话 现代互联网科技股 宁夏科技产业互联网案例 世界互联网科技公司市值排名 广州有谷有贝互联网科技有限公司 互联网科技接地气
0