Flash Builder编译的swf为什么在bin-debug下运行正常,复制到其他文件夹就不正常?

相信用Flash Builder/Flex Builder做开发的大部分开发者都遇到过这样的问题,编译的swf在bin-debug中打开(不是在IDE环境中调试,而是直接双击用Flash Player打开),一切正常;而将其复制到其他文件夹,就会弹出安全错误。这是由于Flash Player对本地回放安全性的限制。详情可看官方文档中的“权限控制”部分。不想看官方文档的,继续往下看。

解决这问题的方法主要是以下两种:

一、使用本地信任文件

在Windows XP操作系统中,当前用户的本地信任文件路径为:
C:\Documents and Settings\[你的用户名]\Application Data\Macromedia\Flash Player\#Security\FlashPlayerTrust

全局的信任文件路径为:
C:\windows\system32\Macromed\Flash\FlashPlayerTrust

在这个文件夹中新建一个纯文本文件,文件名使用英文,扩展名为cfg,其中的内容就是你要信任的swf文件所在的本地路径,每行一个路径即可。

例如,在我的信任路径中,已经被FlashBuilder自动建立了一个名为flashbuilder_plugin.cfg的本地信任文件列表,自动添加了当前所有项目的bin-debug目录,其部分内容为:

C:\Documents and Settings\Administrator\Adobe Flash Builder 4 Plug-in
E:\works\kaitian\demo\TestNullFun\bin-debug
E:\works\kaitian\demo\TestPost\bin-debug
E:\works\kaitian\demo\Vector\bin-debug
E:\works\zrong.googlecode.com\bin

由于默认这些目录已经存在于信任文件中,因此是被信任的,这样在bin-debug下直接打开swf文件,没有权限限制。而如果复制到其他文件夹,而那个文件夹并不在被信任的目录中,就会有权限的限制,从而出现安全错误。

也可以使用设置管理器来做这件事:http://www.adobe.com/go/settingsmanager_cn

这里还有一篇比较老的文章讲的也很详细。

二、编译的时候指定本地回放安全性

如果swf在运行中载入了外部文件,那么这个swf在单独运行的时候,如果不处于信任目录中,就会显示安全错误(前提是使用的Debug版的Flash Player),无法载入外部的文件。

有时候我们在网上下载一些swf小游戏,同时也将这些小游戏需要的资源一同下载并且放在正确的文件夹中,但却仍然出现安全错误,就是这个原因。这种情况下,只需要在本地搭建Web服务器,将要运行的swf放在web环境中运行即可解决。

如果制作的swf只会在本地运行,不妨将它的回放安全性设定为“只访问本地文件”,这样无论是否在信任目录中,都可以载入本地的外部文件了。在Flash中可以通过“发布设置”进行设定:

在Flash Builder/Flex Builder中,可以使用编译参数-use-network=false实现,如下图: