Angular6中使用ActiveXObject调用calc.exe报错求助
解决Angular6中调用全局ActiveX方法报错的问题
这个问题的核心原因是Angular组件的上下文和全局window对象是分离的,你直接在组件里用this.execProg去找方法,自然会找不到——因为你在HTML头部定义的execProg是挂载在全局window对象上的,而不是Angular组件实例的属性。
具体解决步骤:
声明全局window类型(解决TypeScript类型报错)
在你的component.ts文件顶部,添加全局接口声明,告诉TypeScriptwindow对象上存在execProg方法:declare global { interface Window { execProg: (program: string) => void; } }修改组件方法,直接调用window上的execProg
把你原来的comprobarUrl方法改成直接访问全局window对象的方法,而不是用this:public comprobarUrl(): void { window.execProg('Calc'); }如果你习惯用函数表达式写法,也可以改成:
public comprobarUrl = () => { window.execProg('Calc'); }
额外注意事项:
- 这个方案只适用于IE浏览器,因为
ActiveXObject是IE独有的特性,现代浏览器(Chrome、Firefox、Edge等)都已经彻底禁用了ActiveX,所以如果你的项目需要兼容非IE环境,这个方法行不通。 - 确保你的Angular项目没有启用过于严格的安全策略(比如CSP内容安全策略),否则可能会阻止ActiveX脚本的执行。
为什么直接在HTML里操作可以?因为HTML中的脚本运行在全局上下文,直接调用execProg()本质是调用window.execProg(),而Angular组件里的this指向的是组件实例本身,和全局window不是同一个对象,所以直接用this找不到方法。
内容的提问来源于stack exchange,提问作者EduBw
相关产品推荐
相关产品推荐

