我们正在创建一个使用动态加载到主swf中的模块的应用程序。我们遇到的问题是,当我们在本地调试主应用程序时,我们无法加载位于测试服务器上的模块。我们得到的错误是“SWF不是可加载的模块”。
我查了一下,发现我们需要服务器上的跨域文件,该文件授予从外部位置加载模块的权限。所以我们创建了一个简单的跨域文件并将其放在服务器上,但这似乎没有用。
这是跨域文件:
<cross-domain-policy>
<allow-access-from domain="*"/>
</cross-domain-policy>
我们正在通过ModuleLoader类和所有默认设置加载模块,没有自定义应用程序域等。当我们将主swf部署到服务器上时,我们可以毫无问题地加载模块。
任何线索?跨域文件是否可能缺少某些设置?
更新:似乎外部模块已成功加载(我可以在我的HTTP嗅探器中验证)但在主应用程序中加载时无法初始化。错误仍然是“SWF不是可加载模块”
答案 0 :(得分:3)
以下是Adobe JIRA提出的解决方案:http://bugs.adobe.com/jira/browse/SDK-15393
答案 1 :(得分:1)
我认为Adobe尝试访问端口843上的跨域文件,如果它无法连接/找到该端口上的文件,它会尝试连接到您尝试连接的端口(如果是http,则可能是80)。不确定,但您可能需要检查以确保您的服务器允许访问该文件。
另外值得一提的是,您应该允许完全访问本地swf应用程序所在的目录。使用Adobe设置管理器执行此操作: http://www.macromedia.com/support/documentation/en/flashplayer/help/settings_manager04.html
作为旁注,我认为设置管理器是flash生态系统中最糟糕的UI暴行之一。事实上,他们需要在一个文本中明确说明它实际上并不是一个截图真的很有用。
答案 2 :(得分:1)
我同意这可能是本地SWF和远程SWF之间的问题。尝试将本地文件上传到服务器(您有权访问的任何服务器),或者,如果您已运行本地Apache或IIS,请尝试使用http://localhost/访问该SWF。如果可行,我们就会知道问题出在本地文件和远程文件之间。如果不是问题是使用crossdomain.xml或在您的代码中,这不太可能,但我们不应该排除它。如果您确定问题是使用本地SWF,那么在设置管理器中添加本地文件夹(请参阅macke的帖子)
答案 3 :(得分:0)
看起来类似于我的跨域
<?xml version="1.0"?>
<!DOCTYPE cross-domain-policy
SYSTEM "http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd">
<cross-domain-policy>
<allow-access-from domain="*" />
</cross-domain-policy>
那是在您的本地服务器根目录上,对吗?
您是否检查了目录权限?
答案 4 :(得分:0)
根据Adobe的推荐,这是一个可以随时使用的解决方案。
http://aaronhardy.com/flex/loading-a-remote-module-into-a-local-app/