HTML5实战与剖析之跨文档消息传递(iframe传递信息)
来源:互联网 发布:java仿qq登录界面 编辑:程序博客网 时间:2024/09/21 09:26
在来自不同域名的页面间传递消息一般统称为跨文档消息传送,简称XDM。如,www.leemagnum.com域中的页面与位于一个内嵌框架中的http://blog.csdn.net/lee_magnum域名中的页面通信。在XDM机制出现之前,要毫无压力地实现这种通信需要用很长时间。XDM把这种机制规范化,让咱们能够既稳妥又简单地实现跨文档通信。
XDM的核心是postMessage()方法。对于XDM而言,”另一个地方”指的是包含在当前页面中的iframe标签,或者有当前页面弹出的窗口。
postMessage()方法接收两个参数:一条消息和一个表示消息接受来自哪个域名的字符串。第二个参数对保障安全通信非常重要,可以防止浏览器把消息发送到不安全的地方。小例子如下
HTML代码
<iframe id="iframe" src="http://blog.csdn.net/lee_magnum" frameborder="0"></iframe>
JavaScript代码
//获取框架中的windowvar iframeWin = document.getElementById("iframe").contentWindow;alert(iframeWin) // [object window]//向框架中发送消息iframeWin.postMessage("一个消息", "http://blog.csdn.net/lee_magnum")
JavaScript代码中的最后一行代码尝试向内嵌框架中发送一条消息,并制定框架中的文档必须来源于”http://blog.csdn.net/lee_magnum”域。如果来源匹配,消息会传递到内嵌框架中,否则,postMessage()什么也不做。这一限制可以避免窗口中的位置在一些情况下发生改变。如果传给postMessage()的第二个参数是”*”,则表示可以把消息发送给来自任何域的文档。
接收到XDM消息的时候,会触发window对象的message事件。这个事件是以异步形式触发的,所以从发送消息到接收消息(触发接收窗口的message事件)可能要经过一段事件的延迟。触发message事件后,传递给onmessage处理程序的事件对象包含以下三方面的重要信息。
data:作为postMessage()方法第一个参数传入的字符串数据
origin:发送消息的文档所在的域,如”http://blog.csdn.net/lee_magnum”
source:发送消息的文档的window对象的代理。这个代理对象主要用于在发送上一条消息的窗口中调用postMessage()方法。如果发送消息的窗口来自同一个域名,那么这个对象就是window。
接收到消息后验证发送窗口的来源是非常有必要的。就像给postMessage()方法指定第二个参数,来确保浏览器不会把消息发送给未知页面一样,在onmessage()方法处理程序中检测消息来源可以确保传入的消息来自已知的页面。基本的检测模式如下
JavaScript代码
window.addEventListener('message',function(event){//确保发送消息的域名是已知的域名if(event.origin == "http://blog.csdn.net/lee_magnum"){//处理接收到的数据processMessage(event.data);//可选:向来源窗口发送回执event.source.postMessage("收到了", "http://www.leemagnum.com");}}, false);
Event.Source大多数情况下只是window对象的代理,不是实际的window对象。也就是说不能通过这个event.Source代理对象访问window对象的其他任何信息。只能通过event.Source代理调用postMessage()方法。
XDM还有一个奇怪之处。首先,postMessage()的第一个参数最早是作为”永远都是字符串”来实现的。但后来这个参数的定义改了,改成允许传入任何数据结构。但是并非所有浏览器都实现了这个变化。所以保险起见,使用postMessage()方法的时候,最好只传字符串。如果你想传入结构化的数据,最好选择先在要传入的数据上调用JSON.stringify(),通过postMessage()方法传入得到的字符串,然后再在onmessage事件处理程序中调用JSON.parse()方法。
支持XDM的浏览器有Opera、IE8+、Safari 4+、Firefox 3.5+、Chrome、Android版Webkit和iOS版Safari。更多有关XDM的小东东可以去XDM官方页面去学习参考。XDM的官方页面是http://dev.w3.org/html5/postmsg/
HTML5实战与剖析之跨文档消息传递(iframe传递信息)的相关知识就为大家介绍到这里了,更多有关HTML5的相关东东还请关注梦龙小站的相关更新。
- HTML5实战与剖析之跨文档消息传递(iframe传递信息)
- JavaScript:HTML5跨文档消息传递
- HTML5中的跨文档消息传递
- HTML5 postMessage解决跨域、跨iframe窗口消息传递
- HTML5 window/iframe跨域传递消息 API
- HTML5 window/iframe跨域传递消息 API
- HTML5 windows和iframe之间传递消息
- html5 postMessage跨域通信 1.解决页面与嵌套的iframe消息传递
- HTML5 脚本编程之:跨文档消息传递&历史状态管理
- 跨文档消息传递XDM
- postMessage 跨文档消息传递
- 跨文档消息传递应用
- HTML5之window.postMessage实现跨域传递消息
- 【js学习笔记-116】-----html5之跨域消息传递
- 实现跨文档信息传递之localStorage本地存储方法
- 跨文档信息传递之localStorage本地存储
- HTML5 实现跨域消息传递
- HTML5 postMessage 跨域窗口信息传递
- 六、Spring管理数据源
- 关于网络中如何检测共享(NAT)的原理
- JDK, JRE 和JVM的区别
- ehcache2.5后hibernate多SessionFactory报错的解决(Another unnamed CacheManager )
- 将jar文件转换成exe可执行文件
- HTML5实战与剖析之跨文档消息传递(iframe传递信息)
- matlab编程入门学习(6)
- FrameLayout的android:layout_height属性设置为dimen文件中的参数报错
- JavaWeb -- Struts1 使用示例: 表单校验 防表单重复提交 表单数据封装到实体
- Hibernate出现错误:stock is not mapped from stock
- JPetStore在Tomcat上部署方法(不考虑Eclipse及Struts或Spring)
- 上传第三方jar包到nexus
- [论文笔记]Automated Identification of Failure Causes in System Logs
- MyEclipse和Tomcat的关系