Angular 6站点在IE11运行时出现未处理Promise拒绝错误求助
Angular 6在IE11中出现Unhandled Promise rejection: SyntaxError的解决方案
嘿,刚看到你的问题,Angular 6对IE11的支持确实需要额外调整配置,你遇到的这个错误大概率是因为缺少IE11必需的polyfills或者TypeScript编译配置不符合IE的要求。咱们一步步来解决:
1. 修正TypeScript编译配置(tsconfig.json)
你现在的tsconfig里module设为了es2015,但IE11完全不支持ES2015的模块语法,这是核心问题之一。另外,lib的配置也需要调整以适配IE11:
修改后的tsconfig.json应该是这样:
{ "compileOnSave": false, "compilerOptions": { "outDir": "./dist/out-tsc", "baseUrl": "src", "sourceMap": true, "declaration": false, "moduleResolution": "node", "emitDecoratorMetadata": true, "experimentalDecorators": true, "target": "es5", "module": "es5", // 把这里从es2015改成es5 "typeRoots": [ "node_modules/@types" ], "lib": [ "es5", "es2015.promise", "dom" ] // 调整lib,确保包含IE支持的特性 } }
2. 完善项目的polyfills.ts配置
Angular项目默认有src/polyfills.ts文件,里面包含了各种浏览器兼容的补丁,你需要取消IE11相关的注释,确保所有必要的polyfill都被引入:
打开src/polyfills.ts,取消以下代码的注释(如果有的话),没有的话直接添加:
// IE11所需的核心polyfills import 'core-js/es6/symbol'; import 'core-js/es6/object'; import 'core-js/es6/function'; import 'core-js/es6/parse-int'; import 'core-js/es6/parse-float'; import 'core-js/es6/number'; import 'core-js/es6/math'; import 'core-js/es6/string'; import 'core-js/es6/date'; import 'core-js/es6/array'; import 'core-js/es6/regexp'; import 'core-js/es6/map'; import 'core-js/es6/weak-map'; import 'core-js/es6/set'; // Reflect Metadata的polyfill import 'core-js/es6/reflect'; import 'core-js/es7/reflect'; // Zone.js的IE补丁 import 'zone.js/dist/zone'; import 'zone.js/dist/zone-patch-ie';
3. 清理index.html里的冗余polyfill脚本
你现在在index.html里加的几个脚本都是针对旧版Angular的,对Angular 6没用,反而可能造成冲突,建议删除:
<script src="https://npmcdn.com/angular2/es6/dev/src/testing/shims_for_IE.js"></script> <script src="https://cdn.jsdelivr.net/npm/promise-polyfill@8/dist/polyfill.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/bluebird/3.3.4/bluebird.min.js"></script>
保留meta http-equiv="X-UA-Compatible"标签就好,你已经配置正确了。
4. 验证修复效果
修改完所有配置后,重新构建你的项目:
ng build --prod
然后把构建后的dist目录部署到服务器,或者直接在本地用IE11打开测试。
为什么会出现这个错误?
IE11不支持ES2015的语法特性(比如箭头函数、Promise),也不支持ES2015的模块系统。你的原配置里用了module: es2015,加上缺少必要的polyfill,导致浏览器无法解析Promise相关代码,从而抛出了语法错误。
内容的提问来源于stack exchange,提问作者HeineSkov
相关产品推荐
相关产品推荐

