HTML5跨文档消息传递
HTML5定义了一些javascript API,其中有一个就是跨文档消息传递(cross-document-messaging简称XDM)。 现在XDM已经作为一个规范独立了出来,名字为:Web Messaging 项目地址为:http://dev.w3.org/html5/postmsg/ XMD核心就是postMessage()方法,这个方法接受两个参数一个是需要传送的字符串,第二个是接收方的域的字符串。 第二个参数可以控制一定的安全性,如果把第二个参数设置为"*",那么就是所有的域都可以接收此消息。 而相对于postMessage()方法的其他页面指的就是包含在当前页面中的<iframe>元素或者是由当前窗口弹出的窗口。如下列中首先创建一个iframe内嵌框架,获取iframe元素window对象的引用(所有支持XDM的浏览器都支持iframe的contentWindow属性),然后进行消息传递。
var newIframe = document.createElement("iframe"); newIframe.src = "http://www.baidu.com/"; newIframe.width = "500px"; newIframe.height = "500px"; document.body.appendChild(newIframe); var iframeWindow = newIframe.contentWindow; iframeWindow.postMessage("this is post mess", "http://www.baidu.com"); //传递信息成功
传递过后会触发接收方window对象的message事件,在message事件对象中包含三个息息相关重要的属性:
- data:里面包含由postMessage()方法传递过来的第一个参数信息,也就是传递的消息,为字符串形式
- origin:发送消息的方的域,字符串形式如:“http://www.baidu.com”
- source:发送消息方的window对象代理,这个代理主要用于在接收到消息过后然后反馈给发送方消息,调用方式同样为:event.source.postMessage("已收到消息","http://www.baidu.com"),但是它不能用于访问发送方文档信息。
用上面的例子来做演示:
var newIframe = document.createElement("iframe"); newIframe.src = "http://www.baidu.com/"; newIframe.width = "500px"; newIframe.height = "500px"; document.body.appendChild(newIframe); var iframeWindow = newIframe.contentWindow; //定义接收方window对象的message事件 iframeWindow.addEventListener("message", function(event) { //检查是否为安全域 if(event.origin == "http://www.baidu.com/") { //弹出 “this is post mess” alert(event.data); //获取发送方的window代理并返回消息。域为baidu.com event.source.postMessage("已收到消息,反馈","http://www.baidu.com/") }; }, false); //定义发送方window对象的message事件 window.addEventListener("message", function(event) { //检查是否为安全域 if(event.origin == "http://www.baidu.com/"){ //弹出“已收到消息,反馈” alert(event.data); }; }, false); //传递信息成功 iframeWindow.postMessage("this is post mess","http://www.baidu.com");
HTML5跨文档消息传递的更多相关文章
- HTML5实战与剖析之跨文档消息传递(iframe传递信息)
在来自不同域名的页面间传递消息一般统称为跨文档消息传送,简称XDM.如,www.leemagnum.com域中的页面与位于一个内嵌框架中的http://blog.csdn.net/lee_magnum ...
- 跨文档消息传递----postMessage()
HTML5 规范中,提出了XDM,又称为 跨文档消息传递,其核心是 postMessage()方法,进行跨域和跨文档消息传递,示例如下: <div class="CrossDocume ...
- HTML(六)HTML iframe 使用postMessage方法进行跨文档消息传递
什么是iframe HTML内联框架元素 <iframe> 表示嵌套的浏览上下文,有效地将另一个HTML页面嵌入到当前页面中. <iframe id="inlineFram ...
- HTML5中的跨文档消息传递
跨文档消息传送(cross-document messaging),有时候也简称为XDM,指的是来自不同域的页面间传递消息.例如,www.w3cmm.com域中的一个页面与一个位于内嵌框架中的p2p. ...
- HTML5 跨文档消息传输
对窗口对象的message事件进行监听 window.addEventListener("message", function(event) { // 处理程序代码 }, fals ...
- 通过Html5的postMessage和onMessage方法实现跨域跨文档请求访问
在项目中有应用到不同的子项目,通过不同的二级域名实现相互调用功能.其中一个功能是将播放器作为单独的二级域名的请求接口,其他项目必须根据该二级域名调用播放器.最近需要实现视频播放完毕后的事件触发,调用父 ...
- HTML5的文档结构
HTML5的文档结构 HTML5简化了许多,它的设计遵循了3个原则:1.兼容性.2.实用性.3.通用访问性 1. header 元素 <header> 标签定义文档或者文档 ...
- html5的文档申明为什么是<!DOCTYPE html>?
首先我们来了解一下什么是文档声明: 文档声明就是文档告诉游览器该以什么样的标准去解析它.游览器可以解析的文档可不止html,还有xhtml,xml...当然在这里我们并不需要知道xhtml.xml是什 ...
- web通信之跨文档通信 postMessage
index.html <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type&qu ...
随机推荐
- C读取配置文件
#ifndef __CFG_OP_H__ #define __CFG_OP_H__ #ifdef __cplusplus extern "C" { #endif //获取配置项 i ...
- 文本编辑器Nano实用快捷键
一.复制.剪切和粘贴文本 1.行复制.剪切和粘贴 Alt+6:复制光标所在行. Ctrl+K:剪切光标所在行. Ctrl+U:粘贴. 2.自由复制.剪切和粘贴 自由复制: Ctrl+6:设置复制文本的 ...
- Logistic回归总结
原文:http://blog.csdn.net/dongtingzhizi/article/details/15962797 Logistic回归总结 作者:洞庭之子 微博:洞庭之子-Bing (2 ...
- Eclipse插件的安装方法
转自:http://blog.csdn.net/zhangyabinsky/article/details/7043435 Eclipse插件的安装有两种方法 :一个是在线安装,另一个就是手动安装. ...
- vs2010 调试C++程序 快捷键
命令名 快捷键 说明 调试.应用代码更改 Alt + F10 启动生成操作,利用它可以通过“编辑并继续”功能应用对正在调试的代码所作的更改. 调试.自动窗口 Ctrl + D,Ctrl + A 显示“ ...
- 用对象型泛型和ArraysList写一个输入学员信息并展示
题目:录入学员信息并保存,当录入学员的编号为0时结束,展示出学员信息 //student类 public class Student { public int id; public String na ...
- Java中windows路径转换成linux路径等工具类
项目中发现别人写好的操作系统相关的工具类: 我总结的类似相关博客:http://www.cnblogs.com/DreamDrive/p/4289860.html import java.net.In ...
- 转:C++ 性能测试支持
转: http://codinginet.com/articles/view/201606-use_gtestx_for_benchmark?simple=1&from=timeline&am ...
- css3 渐变记
css3 渐变 线性渐变 径向渐变 重复线性渐变 重复径向渐变 线性渐变 线性渐变接受三个参数,渐变的方向,起始颜色,结束颜色. 标准语法及参数:linear-gradient:([[<angl ...
- ORACLE之PACKAGE-游标变量
刚学pl/sql编程,写了两个package.pkg_temp_fn31和pkg_temp_fn32.内容涉及pl/sql基本语法,游标变量,存储过程(in,out). pkg_temp_fn31调用 ...