迟到的春天

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

安全沙箱,跨域问题解决需要按规则来

1、首先说下Loader加载与URLLoader加载的区别
⊙ Loader:只能加载SWF和图像。
⊙ URLLoader:除了能加载swf和图像,还可以加载二进制文件(txt , xml , swc , ........)。

Loader:
当调用Loader的load(req: URLRequest , context: LoaderContext=null)方法时可以指定context,也可不指定。
LoaderContext类包括3个属性,用于指定加载文件时的决策。
  1.checkPolicFile(仅当加载图像文件才设置): 是否从被加载文件的服务器上检查URL策略文件,如果被加载方所在域与加载方所在域不同,需要指定此属性为true。 如果策略文件允许加载方加载,那么可以随意使用图像数据了

  2.securityDomain(仅当加载swf文件才设置): 当被加载文件swf与加载文件swf所在域不同需要设置。
securityDomain仅有2个值(null / SecurityDomain.currentDomain),为第二个值时,意思是说,将被加载的swf"复制"到加载方swf所在域里,之后就可以随意使用被加载进来的swf里的类,方法,属性等(注意:前提是被加载方swf必须授予加载方权限才行,授予权限有2中方式,crossdomian.xml与Security.allowDomain)。

 3.applicationDomain(仅当加载as3编写的swf文件才使用此属性):当加载文件时,可将加载数据放置在特定应用程序域中,有4种程序域(与加载方合并为一个程序域,与加载方并行一个程序域,成为加载方的子域),住:应用程序域是安全域的子单位。

//如下例子:

  

  var loader:Loader = new Loader();

  var urlRequest = new URLRequest();

  urlRequest.url = currentLoadingData.url;//你的资源地址

  /***************/下面这里是跨域的时候需要添加的内容

  var context:LoaderContext = new LoaderContext();

  context.applicationDomain = new ApplicationDomain(ApplicationDomain.currentDomain); //这个是关键
  if(context.checkPolicyFile==true)
  {//跨域的时候用到当被加载文件swf与加载文件swf所在域不同需要设置,(从被加载文件的服务器上检查URL策略文件时)
    context.securityDomain = SecurityDomain.currentDomain;//意思是,把这个被加载SWF的域等同于安全域,被读取文件所在域根目录需要部署crossdomain.XML 策略文件

  }

  /***************/
  loader.load(urlRequest,context);




URLLoader:
当加载的数据时,fp会在被加载方所在服务器检查跨域策略文件的存在,如存在并且该策略文件授予加载方swf文件所在域访问权,则可加载数据。

 

加载方式 Security.loadPolicyFile(“http://myDomain/crossdomain.xml”);//策略文件放在被加载者服务器根目录(在提供数据的站点放入一个crossdomain.xml文件)

posted on 2017-06-08 15:07  维美启程  阅读(457)  评论(0编辑  收藏  举报