加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

swf 绕过沙箱的一种解决方法

发布时间:2020-12-15 17:43:53 所属栏目:百科 来源:网络整理
导读:AS3的安全沙箱的确是让人很无奈,本篇文章仅用于解决一个特定的问题,即A服务器上的SWF文件通过http访问B服务器上的文件,此时即使B服务器上设置了allowdomain.xml,也无济于事,B服务器上被加载的文件除必须的allowdomain.xml外,还必须使用Security.allowD
AS3的安全沙箱的确是让人很无奈,本篇文章仅用于解决一个特定的问题,即A服务器上的SWF文件通过http访问B服务器上的文件,此时即使B服务器上设置了allowdomain.xml,也无济于事,B服务器上被加载的文件除必须的allowdomain.xml外,还必须使用Security.allowDomain("*")才能消除安全沙箱(注:此时只能是swf文件才能设置,图片等无法设置)。对于无法使用Security.allowDomain("*")的文件,我们就可以使用下面这种方式。
使用Loader加载外部文件的时候,如果不出现错误,文件是可以成功加载进来的,只不过是在使用该文件时,flash会报安全沙箱错误,我们可以使用一种方式绕过该安全沙箱,具体操作如下:
1、首先使用一个Loader加载一个外部SWF,监听Loader.contentLoaderInfo的Event.COMPLETE事件;
2、加载成功后,先暂时不使用这个加载成功的Loader,而是另写一个Loader,使用Loader.loadBytes()来加载第一个Loader的contentLoaderInfo.bytes;
3、在第二个Loader加载成功后,就可以使用被加载的文件了;
示例代码:
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?? }? ??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 ??} 

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读