使用fscommand打开外部SWF文件无响应的问题咨询
为什么用FSCommand打开外部SWF没反应?
我之前也踩过FSCommand的坑,这个功能的限制特别多,没反应大概率是下面几个原因导致的:
安全沙盒拦截:如果你的SWF是在浏览器里运行的,浏览器的安全机制会直接阻断FSCommand的
exec命令——毕竟让网页中的Flash随意调用系统程序风险太高了。只有当你直接双击本地SWF文件(而非通过浏览器打开),且Flash播放器允许本地文件访问系统资源时,FSCommand才有可能生效。Flash Player的版本与废弃限制:Adobe早已停止支持Flash Player,现在大部分系统要么未安装,要么即使装了也禁用了
exec这类高风险功能。哪怕你找到旧版本播放器,它也可能默认关闭该功能以规避安全漏洞。路径格式错误:FSCommand的
exec参数对格式要求很严格,路径含空格时必须用双引号包裹,且Windows路径中的\需要转义为\\。举个正确的写法例子:fscommand("exec", "\"C:\\Program Files\\Adobe\\Flash Player\\FlashPlayer.exe\" \"D:\\mySWF.swf\"")要是路径写错、没加引号或者没转义,命令会静默失败,不会给出任何报错提示。
本地安全设置未授权:就算是本地运行的SWF,Flash Player的全局安全设置也可能阻止它执行外部程序。你需要打开Flash Player全局安全设置面板,把存放SWF的文件夹添加到信任位置,播放器才会允许它调用系统命令。
更靠谱的替代方案
既然FSCommand限制这么多,不如换个思路:
- 如果是开发桌面应用,用Adobe AIR打包,它的
File类自带openWithDefaultApplication()方法,能直接调用系统默认程序打开SWF,和双击效果完全一致,权限问题也少很多。 - 如果是网页环境,别再纠结Flash了,现在主流都是HTML5方案,比如用JavaScript的
window.open()(针对在线资源),或者让用户通过文件选择器打开本地SWF(网页受沙盒限制,无法自动打开本地文件)。
内容的提问来源于stack exchange,提问作者أسامة الزاهد
相关产品推荐
相关产品推荐

