`
shake863
  • 浏览: 637976 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

flash 中 安全域 和 crossdomain.xml 的使用

    博客分类:
  • AS
阅读更多

 

一直对flash 的安全域 和 crossdomain 比较迷惑。

由于之前开发flash一直是在同一个域下开发的,也不会出现问题,但是在线上环境,由于各种资源的位置不同,

就会产生一系列问题。

 

痛定思痛,花时间理解透吧。

 

假定: A 域下的 main.swf  调用   B域下的 module.swf

 

1、如果 仅仅是按资源调用,即不会访问被加载者的数据。这个的话,main.swf不需要任何的授权就可以访问module.swf

 

2、如果 是要使用 module.swf  中的数据的话,module.swf  里面必须 Security.allowDomain("A");

 

   但是介于加载 module 的方式不同又有所区别。

 

   a、加载到一个新的应用域或者当前域的子域的话,LoaderContext 只需要声明 applicationDomain 即可,

        其他不需要授权,但是这种方法取 module 中的 数据(class)的话,必须保存 loadInfo ,然后由loadInfo

        中的Application 域来获取 class。

 

   b、加载到当前应用域的话,即想在取 module 数据(class)的时候,不需用加载时候保存的loadInfo,通过
        Application.currentDomain 即可取 数据。切记,这个时候要声明 LoaderContext 的 安全域 为 当前安全域,

       即 context.securityDomain = SecurityDomain.currentDomain;,因为涉及到了当前安全域的授权性,所以

      B域下 要 为 A域 做 crossdomain 授权。

 

到此对应用程序的 安全域 和 应用程序域有了比较深刻的了解。

 

安全域 可以理解成和网站域名相对应的一个域,只要域之间涉及到 跨域操作,无论 图片,swf,还是视频
都要在 crossdomain 中 声明。

 

adobe 官方对 crossdomain 的解释是:

  • 位图、声音和视频中的数据

  • 加载 XML 和文本文件

  • 将 SWF 文件从其它安全域导入到执行加载的 SWF 文件所在的安全域

  • 对套接字和 XML 套接字连接的访问

所以只要设计到安全域的问题 都要在 crossdomain 声明。

在安全域的前提下,swf 又有额外的授权限制,只module.swf 通过Security.allowDomain 对 A域授权了,

A才能访问 module 中的数据,同理,main 也可对 module 授权。

 

另外  Security.sandboxType 安全沙箱  应该是安全域父类,因为安全域的概念只是在

remote (Security.REMOTE )下才有意义。

 

在安全域下面又有 应用程序域,可以理解成在一个网站下面 有 很多 程序,这些程序有些是继承关系,有些是共享关系,

有些是封闭关系,有产生了 子域加载,同域加载,和新域加载。

 

 

另外安全沙箱 的 全部类型:

 

  • remote (Security.REMOTE ):此文件来自 Internet URL,并在基于域的沙箱规则下运行。
  • localWithFile (Security.LOCAL_WITH_FILE ):此文件是本地文件,尚未受到用户信任,且不是使用网络名称进行发布的 SWF 文件。此 文件可以从本地数据源读取数据,但不能与 Internet 进行通信。
  • localWithNetwork (Security.LOCAL_WITH_NETWORK ):此 SWF 文件是本地文件,尚未受到用户信任,且已使用网络名称进行发布。此 SWF 文件可与 Internet 通信,但不能从本地数据源读取数据。
  • localTrusted (Security.LOCAL_TRUSTED ):此文件是本地文件,并且用户已经使用 Flash Player“设置管理器”或 FlashPlayerTrust 配置文件将其设置为受信任的文件。此 文件既可以从本地数据源读取数据,也可以与 Internet 进行通信。
  • application (Security.APPLICATION ):此文件在 AIR 应用程序中运行,并且随该应用程序的包(AIR 文件)一起安装。默认情况下,AIR 应用程序沙箱中的文件可以跨脚本访问任何域中的任何文件(尽管不允许 AIR 应用程序沙箱以外的文件跨脚本访问 AIR 文件)。默认情况下,AIR 应用程序沙箱中的文件可以加载任何域中的内容和数据。

 

 

 

未完待续。。。。。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics