Angular 7在IE11中出现SCRIPT445错误,求解决方案
我之前维护Angular 7项目适配IE11时,也碰到过这个一模一样的zone.js报错,折腾了好几个小时才搞定,给你分享几个亲测有效的解决思路:
1. 补充zone.js的IE专属polyfill
你现在的polyfills里缺了zone.js针对IE的兼容补丁,在polyfills.ts里添加这行导入,一定要放在import 'zone.js/dist/zone';(如果有的话)之前:
import 'zone.js/dist/zone-polyfill';
这行polyfill会专门处理IE11里zone.js的一些API兼容问题,比如你报错的handleError相关逻辑。
2. 补全遗漏的核心polyfills
Angular 7适配IE11还需要几个你没提到的polyfills,把这些也加到polyfills.ts里:
import 'core-js/es7/reflect';:Angular依赖的反射API,IE11原生不支持import 'classlist.js';:修复IE11对DOM元素classList方法的支持缺失- 如果你的项目用到了Angular动画,还要加
import 'web-animations-js';
另外,检查一下polyfills.ts里原本注释掉的IE相关配置,把那些针对IE的polyfill导入都取消注释,比如import 'core-js/es6/reflect';(和es7版本二选一即可)。
3. 确保TypeScript编译目标为ES5
打开tsconfig.json,确认compilerOptions里的target设置为es5:
"compilerOptions": { "target": "es5", // 其他配置... }
同时lib数组要包含es5和dom,确保编译后的代码能被IE11识别:
"lib": ["es5", "dom", "es2015"]
4. 匹配zone.js与Angular的版本
Angular 7.2.15对应的zone.js适配版本是~0.8.29,如果你当前的zone.js版本不对,很可能出现兼容问题。可以执行以下命令安装匹配的版本:
npm install zone.js@0.8.29 --save
5. 排查第三方库的兼容问题
很多时候这种报错不是Angular本身的问题,而是项目依赖的第三方库用了IE11不支持的ES6+语法,且没有被转译。你可以:
- 运行
ng build --prod --es5强制打包时转译所有代码为ES5 - 在
angular.json的build.options里开启es5BrowserSupport:
"build": { "options": { "es5BrowserSupport": true, // 其他配置... } }
最后提醒一下:每次修改后一定要清除IE11的缓存(可以用Ctrl+Shift+Delete),IE的缓存机制很顽固,很多时候改了代码但浏览器还在加载旧文件,导致问题看起来没解决。
内容的提问来源于stack exchange,提问作者dan070

