HTML5新特性之跨文档消息传输详解


本文摘自PHP中文网,作者黄舟,侵删。

1、同域限制

所谓“同域限制”是指,出于安全考虑,浏览器只允许脚本与同样协议、同样域名、同样端口的地址进行通信。

2、window.postMessage方法

浏览器限制不同窗口(包括iFrame窗口)之间的通信,除非两个窗口装载的是同一个域名下的网页。window.postMessage方法就是为了解决这个问题而特定的API,可以让不同域名的窗口互相通信。

postMessage方法的格式如下:

1

targetWindow.postMessage(message, targetURL[, transferObject]);

上面代码的targetWindow是指向目标窗口的变量,message是要发送的消息,targetURL是指定目标窗口的网址,不符合该网址就不发送信息,transferObject则是跟随信息一起发送的Transferable对象。

假定当前网页弹出一个新窗口。

1

var popup = window.open(...popup details ...);

然后在当前网页上监听message事件。

1

2

3

4

5

6

7

8

window.addEventListener('message', receiveMessage, false);

function receiveMessage(e) {   

if (e.origin != 'http://example.org') {       

return;

    }

 

    console.log(e.data);

}

上面的代码指定message事件的回调函数是receiveMessage,一旦收到其他窗口发来的信息,receiveMessage函数就会被调用。receiveMessage函数接受一个event事件对象作为参数,该参数里的origin属性表示信息的来源网址,如果该网址不符合要求,就立刻返回。event.data属性则包含了实际发送过来的信息。

event对象的属性除了origin和data,还有一个source属性,指向向当前网页发送信息的窗口对象。

接着,在当前网页上使用postMessage方法对新窗口发送信息。

1

popup.postMessage('hello world!', 'http://example.org');

上面代码的postMessage方法的第一个参数是实际发送的信息,第二个参数是指定发送对象的域名必须是http://example.org。如果对方窗口不是这个域名,信息不会发送出去。

最后,在popup窗口中部署下面的代码。

1

2

3

4

5

//popup 窗口function receiveMessage(event) {

    event.source.postMessage('Nice to see you!', '*');

}

 

window.addEvengtListener('message', receiveMessage, false);

上面代码有几个地方需要注意。首先,receiveMessage函数里面没有过滤信息的来源,任意网址发来的信息都会被处理。其次,postMessage方法中指定的目标窗口的网址是一个星号,表示该信息可以向任意网址发送。通常来说,这两种做法是不推荐的,因为不够安全,可能会被对方过滤掉。

所有浏览器都支持这个方法,但是IE8和IE9只允许postMessage方法与iFrame窗口通信,不能与新窗口通信。IE10允许与新窗口通信,但是只能使用IE特有的MessageChannel对象

以上就是HTML5新特性之跨文档消息传输详解的详细内容,更多文章请关注木庄网络博客

相关阅读 >>

关于HTML5中p和span标签的介绍

HTML5中属性download的详细介绍

HTML5中怎么做五角星

详细介绍7款炫酷的HTML5 canvas动画特效

李炎恢HTML5视频资料分享

详解HTML5 postmessage解决跨域通信的问题

HTML5中返回audiotracklist对象的属性audiotracks

h5怎么实现在线预览pdf

快速开发基于HTML5网络拓扑图应用的详解(图文)

详解HTML5里autofocus自动聚焦属性的使用

更多相关阅读请进入《HTML5》频道 >>




打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...