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还是相对占优的。