HTTP 协议是"请求 / 响应"模型:客户端浏览器发送一个"请求"到服务器,服务器对"请求"做出响应并将"响应"发送回客户端浏览器。也就是说,所有的互动都是由客户端浏览器发起的,服务器不会发起任何互动。
为了创建互动性更强的 Web 应用程序, AJAX 出现了。 AJAX 实现了一个动态地从服务器获取数据的方法,使用 AJAX ,浏览器通过 XMLHttpRequest 对象来发送 HTTP 请求,从而可以在不阻塞用户界面的情况下向服务器发送异步的 HTTP 请求来获取数据。但这也是使用 HTTP 协议,即"请求 / 响应"模型。
为了打破 HTTP 协议的限制, HTML5 规范定义了 Server-Sent Event 和 WebSocket ,这为将浏览器变成功能齐全的 RIA 客户端平台提供了更加强大的 API 。使用这两个特性,可以帮助服务器将数据"推送"到客户端浏览器。其中, Server-Sent Event 是一个单向的从服务器到浏览器的推送; Web Socket 可以实现双向的通信。
为了代码的安全性,在 JavaScript 脚本中不允许跨域访问其它页面中的元素,这给不同的页面数据互访带来了障碍。 HTML 5 中刚好解决了这个问题,实现了在两个不同的域名与端口之间接收发送数据的功能。
window.addEventListener('message', function () {}, false);
postMessage() 方法允许页面中的多个 iframe/window 的通信, postMessage() 方法也可以实现 AJAX 直接跨域,而不通过服务器端代理。
postMessage() 方法向其它窗口发送消息。
otherwindow.postMessage(message, targetOrigin);
otherwindow 表示接收数据页面的引用对象,它可以通过 window.open() 方法返回该对象,也可以通过下标返回 window.frames 的单个实体对象,还可以是 iframe 的 contentWindow 属性。
postMessage() 方法包含两个参数