AS3的安全沙箱的确是让人很无奈,本篇文章仅用于解决一个特定的问题,即A服务器上的SWF文件通过http访问B服务器上的SWF文件,此时即使B服务器上设置了crossdomain.xml,也无济于事,B服务器上被加载的SWF文件除必须的crossdomain.xml外,还必须使用Security.allowDomain("*")才能消除安全沙箱(注:我加载的是AS3编写的SWF)。
对于无法使用Security.allowDomain("*")的SWF文件,如AVM1的SWF或我们无法编辑被加载的SWF时,我们就可以使用下面这种方式。
使用Loader加载外部SWF文件的时候,如果不出现错误,文件是可以成功加载进来的,只不过是在使用该SWF文件时,flash会报安全沙箱错误,我们可以使用一种方式绕过该安全沙箱,具体操作如下:
1、首先使用一个Loader加载一个外部SWF,监听Loader.contentLoaderInfo的Event.COMPLETE事件;
2、加载成功后,先暂时不使用这个加载成功的Loader,而是另写一个Loader,使用Loader.loadBytes()来加载第一个Loader的contentLoaderInfo.bytes;
3、在第二个Loader加载成功后,就可以使用被加载的SWF文件了;
示例代码:
public function load():void
{
// 第一个Loader用于使用url加载文件
var loader1:Loader = new Loader();
loader1.contentLoaderInfo.addEventListener(Event.COMPLETE, loader1Complete);
loader1.load(new URLRequest("文件url"));
}
private function loader1Complete(event:Event):void
{
var loaderinfo:LoaderInfo = event.target as LoaderInfo;
// 第二个Loader用于加载第一个Loader加载进来的bytes
var loader2:Loader = new Loader();
loader2.contentLoaderInfo.addEventListener(Event.COMPLETE, loader2Complete);
loader2.loadBytes(loaderinfo.bytes);
}
private function loader2Complete(event:Event):void
{
// 在这里可以使用被加载进来的文件了
// event.target as DisplayObject
}
注意:使用上面的方式,也应该注意B服务器上有crossdomain.xml文件
附:Flash Player的安全模型
您可以加载来自任何可访问源的内容。
如果执行调用的 SWF 文件位于网络沙箱中并且要加载的文件是本地的,则不允许加载。
如果加载的内容为用 ActionScript 3.0 编写的 SWF 文件,那么除非可以通过调用加载的内容文件中的 System.allowDomain() 或 System.allowInsecureDomain() 方法来允许跨脚本排列,否则另一个安全沙箱中的 SWF 文件不能对它执行跨脚本操作。
如果被加载的内容为 AVM1 SWF 文件(用 ActionScript 1.0 或 2.0 编写),则 AVM2 SWF 文件(用 ActionScript 3.0 编写)不能对它执行跨脚本操作。但是,可以通过使用 LocalConnection 类在两个 SWF 文件之间实现通信。
如果被加载的内容为图像,则除非该 SWF 文件的域包含在该图像原始域的跨域策略文件中,否则安全沙箱之外的 SWF 文件无法访问其数据。
在只能与本地文件系统的内容交互的沙箱中的影片剪辑不能对只能与远程内容交互的沙箱中的影片剪辑使用脚本,反之亦然。
相关推荐
这是个通用类,里面包含了处理843端口的安全沙箱问题以及socket基本的向服务器send资源问题。 请求方式是,先发整形,然后发id长度,再发id(String) 得到的资源是先得到字符长度,再得到字符串。这个是和后退约定的...
写的一款组件·在服务器上运行可解决flash通信问题
NULL 博文链接:https://koda.iteye.com/blog/1716585
flash安全沙箱汇总。从网上摘录的东东。
3.安全沙箱容器@edge方案 4.新探索 随着云计算边界不断向边缘侧延展,5G 和物联网技术的蓬勃发展给边缘计算带来了巨大机遇的同时,也带来了极大的挑战,传统 runc 容器已无法满足用户对不可信、异构工作负载的运行...
详细介绍了FLEX安全沙箱,便于大家开发FLEX时参考使用。
NULL 博文链接:https://renzaihangzhou.iteye.com/blog/2007855
全面认识Flex安全沙箱 flex4发布后在IE中运行出现的安全沙箱问题。
AS与java socket通讯 解决安全沙箱 服务端用JAVA写的 用其他语言写的服务端 可以参考一下 都差不多的 这是网上COPY的那种方法所改进的,可以运行的。
要要安全沙箱是一款免费国产沙箱软件,为用户提供方便,专业,纯粹的沙箱产品。用户可以在要要安全沙箱环境中运行浏览器,软件等程序,沙箱中运行和程序不会对系统和电脑产生任何的实际的更改和影响,程序运行所产生...
AS3 安全沙箱处理集合,一种方法不行用第二种,多种方式总有一种适合你,我也是花了一周时间来处理这个问题,终于解决了,为了方便大家处理这个问题,在此打包供大家下载处理
在Adobe Flash Player升级到9.0.124后,由于安全策略更改,原来Socket或XmlSocket的应用里的http方式加载安全策略的手段不能继续使用。更改如下: 1,首先检测目标服务器的843端口是否提供安全策略 2,如果1没有检测...
flex for arcgis java tomcat环境不能跨域问题 网上找了很多都不能解决我的问题,后来看帮助文档,提供了思路,希望能帮助同样被问题困扰的人。
但是当发布时,访问就错了,提示SecurityError: Error #2048: 安全沙箱冲突:http://localhost:8086/index.swf 不能从 http://www-c8d8bc651c4/ArcGIS/rest/services/zhengzhou/MapServer?f=json 加载数据 ...
Sandboxie(英译“沙盘”)允许你在...可用来保护浏览网页时真实系统的安全,也可以用来清除上网、运行程序的痕迹,还可以用来测试软件,测试病毒等用途。即使在沙盘进程中下载的文件,也可以随着沙盘的清空而删除。
java ,c#,delphi 解决flash安全沙箱问题 聊天室
本程序为绿色mini服务程序 程序会自动打开Flash默认的843端 自动将crossdomain.xml返回给flash客户端 您可以修改crossdomain.xml中的内容,大小不要超过10K 有问题可email我
NULL 博文链接:https://yangkd548.iteye.com/blog/653364