关于导入swf时安全域与应用域的问题

本文探讨了在Flash中加载SWF文件时遇到的安全域与应用域问题,特别是不同域下类定义与实例访问的问题,并提供了解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

关于导入swf时安全域与应用域的问题
2011年05月02日
  比如:
  _classLoader.load(new URLRequest(swfName));
  如果此时swfName类似一个http://ip:port/xxxx/swfName.swf的名字,那么此时你的应用与这个swf文件是处于两个不同的安全域,此时,当导入成功后,假设在swfName.swf中你有一个类org.example.Test类,那么你可以通过_classLoader.contentLoaderInfo.applicationDomain.g etDefinition("org.example.Test")得到该类,但是如果涉及到一些类的定义时,比如你需要调用getDefinitionByName(Test类的实例)时,此时会报Variable Test is not defined,或者你使用flexOrm直接保存Test对象时,此时会报SQLError: 'Error #3115: SQL Error.', details:'', operation:'begin'错误。原因是Test类的应用域与当前应用域不是同一个域,就导致了当前域中找不到Test类,而flexOrm里面的元数据标签Table,Column等标签是与这个的设计信息相关的,此时flexOrm就找不到Test类的定义信息,数据自然保存不进去,所以如果只是对Test类的直接操作就没问题,如果操作一些涉及到类的定义信息时就会有问题。那么如何解决呢 ,经过一下午的测试,发现只要把导入进来的swfName.swf的应用域设置为当前的应用域就可解决了。 此时只需要在
  _classLoader.load(new URLRequest(swfName));该为:
  var ldrC:LoaderContext = new LoaderContext(false,ApplicationDomain.currentDomai n);
  _classLoader.load(new URLRequest(swfName),ldrC);
  注意:ApplicationDomain.currentDomain 这句不能换成new ApplicationDomain(ApplicationDomain.currentDomain) , 这样写仍然是两个不同的应用域。这样就能保证万无一失了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值