问题描述:
当我们加载外部域的图片或swf,并且想对其内容进去操作时报一个flash安全沙箱错误.
类似这样的:
SecurityError: Error #2122: 安全沙箱冲突:Loader.content:http://lite3.cn/crossSecurityBoxDemo.swf 不能访问 http://b42.photo.store.qq.com/http_imgload.cgi?/rurl4_b=c8ae3bff5c6354a730c66740bed7197d25b276019f2ccc813beeef7b691d53eb9441e431c6175aa52feec0446ad35d14d17ca519b506ce4ae738f3632368b83ebf652078300a04d2d14983a03abe72fb754bb231&a=46&b=42 。需要一个策略文件(crossdomain.xml),但在加载此媒体时未设置 checkPolicyFile 标志。
有这样几种安全沙箱错误:
- 需要一个策略文件,但在加载此媒体时未设置 checkPolicyFile 标志.
- 有一个策略文件,但未被授权访问或拒绝访问.
- 加载swf并要脚本互访时,未被授权访问,可以用Security.allowDomain解决
解决方法:
- 用Adobe建议的方法,添加策略文件,添加Security.allowDomain
- 通过loadBytes绕过安全沙箱
第一种方法是常规的方法,但是很多时候我们加载的图片不是自己的,对方服务器肯定不会给我们授权的.
那么这时第二种方法就派上用场了.
下面先看个demo再看源码.
阅读全文...
英文原文:http://www.blog.elimak.com/2009/07/tutorial/
本文将讲述:
怎样安装Ant应用Ant编译你的AS3项目.
与此安装工作将允许你对你的代码编辑工作独立。
然后你可以用任意编辑器打开项目并编译,而不用Flash IDE 或者 Flex.
阅读全文...
今天看优化 Flash 平台的性能帮助文档时发现一个未公开的顶级函数 getSize()
猜想getSize的接口可能是:
/**
* 获取对象的内存占用量
* @param p 任意类型,甚至是Class
* @return 一个数值,单位是byte
*/
public function getSize(p:*):uint;
不过这个方法只能在时间轴上使用,在类里就不能用了.
然后我测试了下flash里有没有内存对齐的概念.
不过获得的内存值都是4的倍数,
如果里面有属性占用为8,则结果则为8的倍数.
相关链接
http://help.adobe.com/zh_CN/as3/mobile/WS4bebcd66a74275c3-576ba64d124318d7189-8000.html
http://help.adobe.com/zh_CN/as3/mobile/WS4bebcd66a74275c3-576ba64d124318d7189-7fff.html
之前只是知道尽量用强引用,不要用弱引用,因为弱引用会被垃圾回收.
对于flash.utils.Dictionary倒是没有什么疑问.但EventDispatcher.addEventListener就不明白具体是侦听器被回收了,还是侦听者被回收了 
昨天有看了一些文章,又想起这个问题,就想要理解透彻,于是又仔细看了下API文档.
Class-level member functions are not subject to garbage collection, so you can set useWeakReference to true for class-level member functions without subjecting them to garbage collection. If you set useWeakReference to true for a listener that is a nested inner function, the function will be garbge-collected and no longer persistent. If you create references to the inner function (save it in another variable) then it is not garbage-collected and stays persistent.
原来这里的弱引用是对侦听器的(侦听器函数),跟侦听者没有关系.
为了验证这个观点,我做了个小Demo.
OK,让我们来一边享受引用,一边学习吧 
阅读全文...
最开始发现是在AS2里用MovieClipLoader加载图片,那次地址写错了,但是依然有onLoadComplete事件触发.
请看下面的代码:
var mc:MovieClip = _root.createEmptyMovieClip("mc", 1);
var loader:MovieClipLoader = new MovieClipLoader();
var listener:Object = {};
loader.addListener(listener);
// 加载一个错误的图片地址,但只要有数据返回(哪怕是404)就会触发complete事件
loader.loadClip("http://www.lite3.cn/errorJpg.jpg", mc);
listener.onLoadComplete = function(target:MovieClip):Void
{
trace("this is loadComplete!");
}
阅读全文...