• 绕开AS3安全沙箱,跨域加载SWF


    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
      }

    注意:使用上面的方式,也应该注意B服务器上有allowdomain.xml文件

  • 相关阅读:
    开发移动端项目如何利用Chrome浏览器连接真机测试
    有关浏览器开发者工具使用的技巧
    有关前端实时可视化工具的使用 ==实现边改代码边看效果
    vue的生命周期介绍beforeCreate(创建前)、created(创建后)、beforeMount(载入前)、mounted(载入后)、beforeUpdate(更新前)、updated(更新后)、beforeDestroy(销毁前)、destroyed(销毁后)
    echart中重新定义引导线的文字换行<br>不起作用
    使用mock数据填写表格同时带点击查看更多
    有关前后端分离前端如何使用mock数据
    echar图柱状图和折线图混合加双侧y轴坐
    【Oracle】DBMS_STATS.GATHER_TABLE_STATS
    【PostgreSQL-9.6.3】Red Hat 4.4.7下的安装
  • 原文地址:https://www.cnblogs.com/jiahuafu/p/1820430.html
Copyright © 2020-2023  润新知