HTML5入门

《精通HTML5编程》第五章:跨文档消息机制

字号+ 作者: 来源: 2014-11-16 20:49 我要评论( )

HTML5提供了跨文档消息机制(Cross Document Messaging),它提供了跨越frame、tabs或windows通信的能力。 PostMessage API 要接收消息的页面需要添加相应的事件监听器,在消息到来时你可以检测其

 HTML5提供了跨文档消息机制(Cross Document Messaging),它提供了跨越frame、tabs或windows通信的能力。

PostMessage API

要接收消息的页面需要添加相应的事件监听器,在消息到来时你可以检测其来源来并判断是否处理。

浏览器的支持情况:

浏览器支持

检测浏览器支持:

JavaScript Code复制内容到剪贴板
  1. if (typeof window.postMessage === “undefined”) {  
  2. // postMessage not supported in this browser  
  3. }  

发送消息:

发送消息给另一个页面:

JavaScript Code复制内容到剪贴板
  1. window.postMessage(“Hello, world”, “portal.example.com”);  

发送消息给iframe:

JavaScript Code复制内容到剪贴板
  1. document.getElementsByTagName(“iframe”)[0].contentWindow.postMessage(“Hello, world”,  
  2. “chat.example.net”);  

监听消息:

首先设置白名单,对接受到的消息进行过滤,只处理信任页面发送的消息。

JavaScript Code复制内容到剪贴板
  1. var originWhiteList = [“portal.example.com”, “games.example.com”, “www.example.com”];    
  2. function checkWhiteList(origin) {    
  3.     for (var i=0; i<originWhiteList.length; i++) {    
  4.         if (origin === originWhiteList[i]) {    
  5.         return true;    
  6.         }    
  7.     }    
  8.     return false;    
  9. }    
  10. function messageHandler(e) {    
  11.     if(checkWhiteList(e.origin)) {    
  12.         processMessage(e.data);    
  13.     } else {    
  14.     // ignore messages from unrecognized origins    
  15.     }    
  16. }    
  17. window.addEventListener(“message”, messageHandler, true);    

XMLHttpRequest Level 2

HTML5中定义了XMLHttpRequest Level 2,它有两方面的增强:跨域通信,通信进度通知(progress events)

跨域通信:

XMLHttpRequest Level 2使用跨域资源共享Cross Origin Resource Sharing(CORS)来提供跨越多个域的通信。所有跨域的请求都有Origin消息头,它保存发起请求的域的信息。Origin被浏览器保护无法在代码中作出修改。Origin消息头和PostMessage消息事件中的origin本质上相同。Origin和传统的referer消息头不同的地方在于,referer是完整的URL,包括文档路径(path)。由于文档路径可能包含隐私信息,所以有时候为保护用户隐私,浏览器并不会发送referer消息头。但是只要可能,浏览器总是会发送Origin消息头。
CORS标准要求一个credentials的请求(a request with credentials)或非GET、POST的请求,一定要发送perflight选项给服务器,所以跨域通信可能需要支持CORS的服务器。

进度通知:

XMLHttpRequest Level2发送消息的时候除了传统的readyState之外,还提供了如下进度通知相关的事件:
loadstart、progress、abort、error、load、loadend。

浏览器支持情况:

浏览器支持

检测浏览器支持:

JavaScript Code复制内容到剪贴板
  1. var xhr = new XMLHttpRequest()    
  2. if (typeof xhr.withCredentials === undefined) {    
  3. document.getElementById("support").innerHTML =    
  4. "Your browser <strong>does not</strong> support cross-origin XMLHttpRequest";    
  5. else {    
  6. document.getElementById("support").innerHTML =    
  7. "Your browser <strong>does</strong>support cross-origin XMLHttpRequest";    
  8. }    
 

执行跨域请求:

var crossOriginRequest = new XMLHttpRequest()
crossOriginRequest.open(“GET”, “http://www.example.net/stockfeed”, true);

使用进度通知事件:

JavaScript Code复制内容到剪贴板
  1. crossOriginRequest.onprogress = function(e) {    
  2. var total = e.total;    
  3. var loaded = e.loaded;    
  4. if (e.lengthComputable) {    
  5. // do something with the progress information    
  6. }    
  7. }    
  8. crossOriginRequest.upload.onprogress = function(e) {    
  9. var total = e.total;    
  10. var loaded = e.loaded;    
  11. if (e.lengthComputable) {    
  12. // do something with the progress information    
  13. }    
  14. }    

 

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
  • 《精通HTML5编程》第十一章:尚未广泛支持的新特

    《精通HTML5编程》第十一章:尚未广泛支持的新特

    2014-11-16 20:49

  • 《精通HTML5编程》第十章:离线应用和尚未广泛支

    《精通HTML5编程》第十章:离线应用和尚未广泛支

    2014-11-16 20:49

  • 《精通HTML5编程》第九章:Web Sotrage API

    《精通HTML5编程》第九章:Web Sotrage API

    2014-11-16 20:49

  • 《精通HTML5编程》第八章:HTML5 Web Worker API

    《精通HTML5编程》第八章:HTML5 Web Worker API

    2014-11-16 20:49

网友点评