Ajax跨域访问的替代方案

Ajax是不能直接做跨域访问的!

看了一下流行的跨域处理,一个是dojo做的iFrame,无奈我对这个不熟,为避免出什么篓子,就不敢用了,另一个是美妙的flash。

flash的安全性控制集中在两个方面,一个是swf访问站点动态数据,另一个是swf和js的交互。

swf文件要访问不同域下的数据源时,需要该数据源所在的域A用crossdomain.xml的方式声明这种来自域B的swf的访问被允许。具体的控制由flash player实现。

一个crossdomain.xml的例子如:

?xml version=

1.0

?

!DOCTYPE cross-domain-policy

SYSTEM

http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd

cross-domain-policy

allow-access-from domain=

www.pjoke.com

/

allow-access-from domain=

zhengrenchi.blogbus.com

/

allow-access-from domain=

simonzh.spaces.live.com

/

/cross-domain-policy

当然也可以直接domain=

*

,那么来自任意域的swf都可以访问了它了。

同一个页面上的来自A域的swf和来自B域的HTML中的JS交互,首先需要把object 标签中的

AllowScriptAccess属性声明为always,

然后在A域的swf中添加这样的允许语句:

system.security.allowDomain(

www.pjoke.com

);

system.security.allowDomain(

zhengrenchi.blogbus.com

);

system.security.allowDomain(

simonzh.spaces.live.com

);

事实上,保证这两类安全性的完全在于Adobe发布的标准flashplayer,如果出了别的player就难说了。然而相对于ajax这样无法通过统一渠道控制安全的技术,安全性都变成由浏览器来决定了,flash还是相对占优的。