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跨文档消息传递的更多相关文章

  1. HTML5实战与剖析之跨文档消息传递(iframe传递信息)

    在来自不同域名的页面间传递消息一般统称为跨文档消息传送,简称XDM.如,www.leemagnum.com域中的页面与位于一个内嵌框架中的http://blog.csdn.net/lee_magnum ...

  2. 跨文档消息传递----postMessage()

    HTML5 规范中,提出了XDM,又称为 跨文档消息传递,其核心是 postMessage()方法,进行跨域和跨文档消息传递,示例如下: <div class="CrossDocume ...

  3. HTML(六)HTML iframe 使用postMessage方法进行跨文档消息传递

    什么是iframe HTML内联框架元素 <iframe> 表示嵌套的浏览上下文,有效地将另一个HTML页面嵌入到当前页面中. <iframe id="inlineFram ...

  4. HTML5中的跨文档消息传递

    跨文档消息传送(cross-document messaging),有时候也简称为XDM,指的是来自不同域的页面间传递消息.例如,www.w3cmm.com域中的一个页面与一个位于内嵌框架中的p2p. ...

  5. HTML5 跨文档消息传输

    对窗口对象的message事件进行监听 window.addEventListener("message", function(event) { // 处理程序代码 }, fals ...

  6. 通过Html5的postMessage和onMessage方法实现跨域跨文档请求访问

    在项目中有应用到不同的子项目,通过不同的二级域名实现相互调用功能.其中一个功能是将播放器作为单独的二级域名的请求接口,其他项目必须根据该二级域名调用播放器.最近需要实现视频播放完毕后的事件触发,调用父 ...

  7. HTML5的文档结构

    HTML5的文档结构 HTML5简化了许多,它的设计遵循了3个原则:1.兼容性.2.实用性.3.通用访问性     1. header 元素     <header> 标签定义文档或者文档 ...

  8. html5的文档申明为什么是<!DOCTYPE html>?

    首先我们来了解一下什么是文档声明: 文档声明就是文档告诉游览器该以什么样的标准去解析它.游览器可以解析的文档可不止html,还有xhtml,xml...当然在这里我们并不需要知道xhtml.xml是什 ...

  9. web通信之跨文档通信 postMessage

    index.html <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type&qu ...

随机推荐

  1. api.connectionType 判断当前网络技术经验

    使用  api.connectionType 判断当前网络的时候,需要注意,要加入大小写转换,三星返回的网络是大写 3G /** * 返回当前是否联网 * 周枫 * 3g 4g wifi none * ...

  2. 将Uploads文件夹移到其它地方

    1.在创建目录 cd /mnt/xvdb mkdir qingtong 2.复制目录和权限 cp -rp /Uploads/ ./ -r 包括目录 p权限 3.创建软链接 ln -s /mnt/xvd ...

  3. SAP BW 重新初始化

  4. Python学习 之 文件

    1.文件读写 python进行文件读写的函数是open或file file_handler=open(filename,,mode) (1)打开并读取文件 方式一:open() fo=open('/r ...

  5. Pass value from child popup window to parent page window using JavaScript--reference

    Here Mudassar Ahmed Khan has explained how to pass value from child popup window to parent page wind ...

  6. Jquery 之 日常积累(一)

    1.jquery函数在参数中传递 this,正确的写法: //页面中用 GetString(this); //脚本中定义 function GetString(obj){ var str = $(ob ...

  7. Android(java)学习笔记106-1:深入分析Java ClassLoader原理

    1. 前言: Android中的动态加载机制能更好的优化我们的应用,同时实现动态的更新,这就便于我们管理我们的应用,通过插件化来减轻我们的内存以及CPU消耗,在不发布新版本的情况下能更新某些模块. 当 ...

  8. Debian 7 安装 Python3.4

    Debian 7 自带的python是2.7.3,要用最新的3.4版本怎么办?我们从官网下载压缩包自己编译. 一.安装编译用的包 $ sudo apt-get install build-essent ...

  9. ArcGIS Server 10.2 实战(三)图层标注及图例中文显示乱码的解决

    发布的图层中不可避免的使用到中文来标注,默认设置下,ArcGIS Server不支持中文的,中文标注显示成乱码,主要是编码的问题,需要把手动把编码改为UTF-8. ArcGIS Server 10.2 ...

  10. make clean 和make distclean的区别

    make clean 和make distclean的区别:make clean仅仅是清除之前编译的可执行文件及配置文件.而make distclean要清除所有生成的文件make distclean ...