跨域凶器easyXDM及jquery.postmessage原理及解析及window.name及JSOCKET

跨域利器easyXDM及jquery.postmessage原理及解析及window.name及JSOCKET

  最近工作中安排了个关于JS跨域问题,项目组最初使用了jquery.postmessage进行跨域,结果发现IE8以下不兼容,所以选择了easyXDM.

  但是easyXDM在IE8以下需要FLASH插件支撑,这个时候问题又出现了,我们的页面没有视频,如果用户没有安装FLASH插件的话,那就需要提示用户下载FLASH插件了。

   然后我开始用window.name写了个实例,确实能跨域跨浏览器获取数据,但是实时监听数据变化来执行JS方法怎么办,最简单的方法就是建立一个计时器,每隔多少时间执行下看获取的值是否发生改变,然后在执行。

   但是这个方法我觉得不是很妥当,于是想到javascript能否建立一个SOCKT进行监听呢,于是查看JSCOKET,发现JSOCKET通信原是借助于FLASH,结果牛人在网上说明,之所以JAVASCRIPT需要依赖FLASH建立SOCKET,是因为JAVASCRIPT是客户端语言,不能进行SOCKT通信.

  经过上述的经历,我查了些资料。

  1.postMessage 是 HTML5 新方法,它可以实现跨域窗口之间通讯。到目前为止,只有 IE8+, Firefox 3, Opera 9, Chrome 3和 Safari 4 支持,而本篇文章主要讲述 postMessage 方法与 message 事件跨浏览器实现。(详细见http://bbs.phpchina.com/thread-230525-1-1.html)
   2.jsockt原理是通过JS于FLASH交互,建立SOCKET通信.(详细见http://code.google.com/p/jsocket/wiki/Reference,其中

jSocket.setup(target)

target:string id of the element to replace with the socket.

Add the socket swf to the page, by replacing an element specified with the target argument. jSocket.onReady Will be fired upon succesful completion. )

  3.easyXDM 在IE8+, Firefox 3, Opera 9, Chrome 3和 Safari 4使用postmessage,在IE6+,iE7+使用FLASH(详细见http://easyxdm.net/wp/),因此得出easyXDM的跨域原理是分别采用了postmessage跨域及借助FLASH进行跨域。