跨域通信总结

昨天看到了HTML5的跨域通信解决方案,使用postMessage和XMLHttpRequest level 2,记录如下:
  • postMessage
    1. 浏览器支持情况 只有IE6、7不支持。浏览器支持情况监测:if(typeof window.postMessage==="undefined"){}
    2. 发送消息 window.postMessage("hello,world","blog.husters.org"); 第一个参数是要发送的消息,第二个参数是要发送的目的地。要发送消息给iframe,可以在相应的iframe的contentwindow中调用document.getElementByName("iframe")[0].contentWindow.postMessage("hello,world","blog.husters.org");
    3. 监听事件(通过白名单鉴定源) 看下面的小段代码就明白了: [php] var originWhiteList=["blog.husters.org","huawei.husters.org","www.husters.org"]; function checkWhiteList(origin){ for (var i=0;i<originWhiteList.length;i++){ if(origin===originWhiteList[i]){ reture true; } } return false; } function messageHandle(e){ if(checkWhiteList(e.origin){ postMessage(e.data); }else{ } } [/php]
  • XMLHttpRequest Level 2
    1. 浏览器支持情况 检测思路:检测XMLHttpRequest是否支持withCredentials: var xhr=new XMLHttpRequest(); if(typeof xhr.withCredentials==="undefined"){}else{}
    2. 构建跨源请求 var crossOriginRequest=new XMLHttpRequest(); 接下来,通过指定不同元的地址来构造跨源XMLHttpRequest crossOriginRequest.open("GET","http://blog.husters.org",true)
    3. 使用进度事件 [php] crossOriginRequest.onProgress=function(e){ var total=e.total; var loaded=e.loaded; if(e.lengthComputable){ console.log(load/total+" % loaded"); cross.OriginRequest.upload.onProgress=function(e){ var total=e.total; var loaded=e.loaded; if(e.lengthComputable){ console.log(loaded/total+"%upload");[/php]
读书笔记就简单的记到这了,但怎能就这么简单的就结束了呢! 跨域的方案非常多,至少有10种以上,可以看这里了解更多。不同的应用场景都有各自最适合的解决方案。比如单向的数据请求,就应该选择JSONP或window.name,双向通信则通常采取Cross Frame。
posted @ 2013-04-21 10:45  echoHUST  阅读(216)  评论(0编辑  收藏  举报