IE9中使用ActiveX Object获取文件大小失败的技术求助
解决IE9中使用ActiveX获取文件大小的SCRIPT429错误
首先,你遇到的SCRIPT429: Automation server can't create object错误,在IE9里使用Scripting.FileSystemObject时非常常见,核心原因几乎都是浏览器安全策略限制——哪怕你看到浏览器显示支持ActiveX,也不代表特定控件能在当前安全区域下创建。
可能的原因
- 安全区域设置拦截:IE的不同安全区域(Internet/本地Intranet/可信站点)对ActiveX的权限不同,默认情况下,Internet区域会直接禁止创建
Scripting.FileSystemObject这类涉及本地文件访问的控件。 - 控件初始化权限不足:即使ActiveX整体启用,控件可能被标记为“未标记为可安全执行脚本”,浏览器会阻止其初始化运行。
- 文件路径异常:如果用户选择的文件路径格式有问题,或者浏览器无法访问该路径,也可能触发错误,但这个概率相对较低。
分步解决方案
1. 调整IE9的安全设置(最关键步骤)
IE9的默认安全策略会直接拦截Scripting.FileSystemObject的创建,你需要针对性调整:
- 打开IE9,点击右上角工具 → Internet选项 → 切换到安全标签页
- 根据使用场景选择对应区域:本地测试/内部网站选本地Intranet;可信外部网站先添加到可信站点
- 点击自定义级别,在设置面板中找到以下选项调整:
- 找到对未标记为可安全执行脚本的ActiveX控件初始化并执行脚本,设置为提示或启用(测试阶段可选启用,正式环境建议选提示)
- 找到Scripting下的允许运行以前未使用的ActiveX控件而不提示,临时设置为提示(方便测试,之后可改回默认)
- 点击确定保存设置,重启IE9生效
2. 优化代码,增加错误处理和校验
给你的代码加上错误捕获和路径校验,避免直接崩溃,同时让错误信息更清晰:
// 用原生JS更稳妥(如果用jQuery也可,但原生兼容性更好) var fileInput = document.getElementById("fileInput"); var iefilePath = fileInput.value; // 先校验是否选择了文件 if (!iefilePath) { alert("请先选择要检测的文件"); return; } var ieFileName = iefilePath.slice(iefilePath.lastIndexOf("\\") + 1); var objFSO, objFile; try { // 尝试创建FileSystemObject objFSO = new ActiveXObject("Scripting.FileSystemObject"); objFile = objFSO.getFile(iefilePath); var fileSize = objFile.size; alert(`文件 ${ieFileName} 的大小是:${fileSize} 字节`); } catch (e) { console.error("获取文件大小失败详情:", e); alert(`无法获取文件大小:${e.message}\n请检查IE安全区域设置是否允许ActiveX控件运行`); }
3. 公网网站的替代方案
如果你的网站面向公网用户,让用户修改IE安全设置显然不现实。由于IE9本身不支持HTML5的File API(IE10及以上才支持),这种情况下没有完美的前端解决方案,只能建议:
- 引导用户升级到IE10+或其他现代浏览器
- 改用后端校验:让用户上传文件到服务器,由后端返回文件大小
补充说明
Scripting.FileSystemObject是用于本地文件操作的控件,浏览器对其的限制是出于安全考虑,防止恶意网站访问用户本地文件。所以只有在受控环境(比如企业内部系统、本地测试)下,调整安全设置使用这个方案才合理。
内容的提问来源于stack exchange,提问作者Prasob




