AS3技术求助:本地服务器托管的外部SWF文件无法加载
添加错误事件监听
当前代码仅监听了加载进度事件,未捕获加载错误信息,这是排查核心第一步。给contentLoaderInfo添加错误监听,直接获取具体失败原因:this.myLoader.contentLoaderInfo.addEventListener(ErrorEvent.ERROR, onLoadError); this.myLoader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, onIOError); private function onLoadError(e:ErrorEvent):void { trace("加载错误详情: " + e.text); } private function onIOError(e:IOErrorEvent):void { trace("IO错误详情: " + e.text); }配置跨域策略文件
即使是localhost不同端口,Flash Player仍会判定为跨域。在你的Web服务器根目录(即http://localhost:5173/下)创建crossdomain.xml文件,内容如下:<?xml version="1.0"?> <cross-domain-policy> <allow-access-from domain="*" /> <allow-http-request-headers-from domain="*" headers="*"/> </cross-domain-policy>同时调整
LoaderContext的安全域设置:var context:LoaderContext = new LoaderContext(); context.securityDomain = SecurityDomain.currentDomain; // 保留或调整applicationDomain设置,先测试安全域是否解决问题 this.myLoader.load(myRequest, context);验证SWF文件完整性与可运行性
直接下载file.swf并单独用Flash Player打开,确认文件本身无损坏。如果单独打开失败,说明文件编译或传输过程中出现问题,需重新生成或上传。调整ApplicationDomain设置
代码中使用new ApplicationDomain(ApplicationDomain.currentDomain)会让加载的SWF共享当前域的类,可能引发类冲突或权限问题。尝试注释该配置,使用默认独立域测试:var context:LoaderContext = new LoaderContext(); // context.applicationDomain = new ApplicationDomain(ApplicationDomain.currentDomain); this.myLoader.load(myRequest, context);统一沙箱环境
如果当前是直接本地运行preload.swf(双击打开),Flash Player会将其归入本地沙箱,无法直接访问远程沙箱的localhost:5173/file.swf。将preload.swf也上传到同一Web服务器,通过http://localhost:5173/preload.swf访问,确保两个SWF处于同一沙箱。检查请求响应状态与ContentType
在浏览器开发者工具中查看file.swf的请求详情:- 确认响应状态码为200
- 检查响应头的
Content-Type是否为application/x-shockwave-flash,部分服务器可能返回application/octet-stream,导致Flash Player无法正确识别文件类型。
内容的提问来源于stack exchange,提问作者Michael Fernandez-Juarez

