as3的跨域访问安全沙箱
发布:Coamy | 发布时间: 2010年7月3日在actionscript里,如果要从其它域里载入swf或数据的话,或者socket要连接服务端的话,就会遇到这个超贱的安全沙箱.在以下情 况里(抄自as3 cookbook):
1.swf将要连接的服务器,必须与此swf在同一域中;
2.从网络打开的网页中的swf不能连接到本地服务器(废到无耻的话);
3.本地不受信任的swf不能连接任何服务器或载入任何文件.
4.swf被跨域载入了,但是不能用as控制其中的代码:
5.跨域载入变量,不行.
其 中第三个安全规则我很有意见,因为adobe把控制面板放在它自己的网站里,贱得嘀嘀叫.
解决的方法有两个.
这里所说的方法,都是 在被载入的域中进行的,一定注意.[当然了,你得有被载入文件或被连接服务器管理权限]
第一个方 法:
1.如果被载入域是以http的方式来提供服务的,那就可以在被载入swf的as里用 flash.system.Security.allowDomian("允许改变此代码的网域");
2.如果被载入域是以https的方式来提供服务的,那可以在被载入swf的as里用 flash.system.Security.allowInsecureDomai("允许改变此代码的网域");
上面所说,解决的是开头所列 举的第4个安全限制.
第二个方法:
这 个方法比第一个方法更方便的解决了跨域被载入swf里as访问限制,而且还解决了跨域载入网页中的变量的安全问题:写访问域方针文件.
另外这个方法也可以解决socket的跨域连接服务器的安全限制.
如下:
<?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="网址或IP" to-ports="80,开放的端口,..." />
</cross-domain-policy>
把 此文件保存为crossdomain.xml放在被载入域的根目录下面,载入变量和访问被载入swf中的as时候,做动作的swf就会自动读取了.
to-ports是个可选参数,如果不写的话,默认的是开放web端口,也就是80.
但是在socket连接 时,不但跨域方针文件要指定端口(因为一般都不会把80做为socket服务器端口),还得在as中明文载入跨域方针文 件:flash.system.Security.loadPolicyFile("跨域方针文件所在路径");
注意了,上面所说的"跨域方针文 件所在路径",可以是在任何目录下面,而且它所能控制的就是所在目录和其子目录,权限不能达到上一层目录.
先决条件:必须打开843端口
- 相关文章:
PureMVC初探 (2010-6-28 21:28:20)
flash模块开发 (2010-6-28 21:9:28)
AStar A*寻路算法 (2010-6-24 21:29:52)
AS3事件中target和currentTarget的区别 (2010-1-18 14:20:36)
as3数组的浅复制和深复制 (2010-1-18 11:45:38)
as3悬停提示框类 (2010-1-13 11:9:42)
ColorTransform 构造函数 - as3 (2010-1-11 14:33:22)
AS3是深度复制数组的 (2010-1-11 14:32:24)
让父swf获得子swf的事件(as3) (2010-1-11 14:31:30)
actionscript3技巧与提示(10) (2009-10-30 10:31:41)
发表评论
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。





