最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501
当前位置: 首页 - 科技 - 知识百科 - 正文

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

来源:懂视网 责编:小采 时间:2020-11-27 15:10:12
文档

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

HTML5新特性之跨文档消息传输详解:1、同域限制所谓同域限制是指,出于http://www.gxlcms.com/wiki/397.html target=_blank
推荐度:
导读HTML5新特性之跨文档消息传输详解:1、同域限制所谓同域限制是指,出于http://www.gxlcms.com/wiki/397.html target=_blank

1、同域限制

所谓“同域限制”是指,出于http://www.gxlcms.com/wiki/397.html" target="_blank">安全考虑,浏览器只允许脚本与同样协议、同样域名、同样端口的地址进行通信。

2、window.postMessage方法

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

postMessage方法的格式如下:

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

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

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

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

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

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方法对新窗口发送信息。

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

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

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

//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对象

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文档

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

HTML5新特性之跨文档消息传输详解:1、同域限制所谓同域限制是指,出于http://www.gxlcms.com/wiki/397.html target=_blank
推荐度:
标签: 消息 信息 html5
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top