flash不能使用加载进来的swf的库中的类名的可能原因
做flash开发的时候,如果选择swf文件作为资源文件的话,很多时候需要根据库中的类名来创建资源中的实例,例如一个怪物的动画(MovieClip)。
按照正常状况,只要加载到对应的swf而且这个swf在允许的沙箱安全域的时候是能正常创建这些资源的实例的。
但是有些时候会出错, 程序就会报"变量 xxx 未定义"等错误信息
出现这个错误是很烦人的,首先要确认是否真的加载到了这个资源, 而且这个资源中真的存在唯一的 "xxx" 类名,而且是这个资源加载进来后(确保其存在于内存中)才使用这个 "xxx" 类名来创建实例的。
如果上一步没有问题, 那么第二步就应该检测是否有跨域的问题, 就是如果有跨域的问题请见我前两篇文章的描述(不知道是否有帮助:http://www.cnblogs.com/vilyLei/articles/2039138.html)
如果上两步都没问题,那么就要看看是否是gzip的问题。
如果放置资源的服务器在swf等文件上开启了gzip服务的话, flash在load进swf资源的时候, 因为无法正确的处理gzip解压缩的问题而导致加载进来的flash swf结构有问题。
这个问题很头痛,它的表现就是当缓存中有这个swf的时候不出错,如果没有就出错。因为缓存有这个swf并且从缓存读取的时候这个swf已经被浏览器进行正确的gzip解压缩了(除非这个浏览器不支持gzip)
可以在flash的load程序中加入支持gzip的功能,但是出于不稳定性, 关于gzip个人推荐服务器不要对swf等资源文件做什么gzip压缩, 免得引起让人摸不着北的问题。
如果你使用CDN就要更小心了, 因为CDN上的文件是从你的某个服务器上上得到的,有些文件是新的有些文件是旧的。假定你的旧的文件设置了gizp而新的文件取消了gzip, 那么有gzip设置的swf文件在使用的时候就会报错
这是花了时间才得到的心得, 希望在这里的这些观点对你有用。
如果您有更多的心得,很高兴与您分享。
gzip技术文档:http://www.ietf.org/rfc/rfc1952.txt