Angular 6应用在Safari无法运行(IE/Chrome正常),已尝试Polyfill
解决Angular 6在Safari浏览器无法运行的问题
我来帮你排查下Angular 6在Safari里跑不起来的问题——这种无报错的静默失败通常是Safari对某些ES特性的支持不全,或者编译/Polyfill配置没覆盖到Safari的需求。结合你给出的polyfill.ts内容,我给你几个具体的排查和修复方向:
1. 补充Safari专属的Polyfill
你的现有Polyfill主要针对IE,但Safari(尤其是旧版本)对ES6/ES7的部分特性支持逻辑和IE不一样,建议在polyfill.ts里添加以下内容:
// 针对Safari的额外Polyfill import 'core-js/es7/array'; // 覆盖Array的includes、flat等新方法 import 'core-js/es7/object'; // 覆盖Object的entries、values等方法 import 'core-js/es/promise'; // 确保Promise的全量支持 import 'es6-promise/auto'; // 兼容Safari 10及以下的Promise实现
记得先安装依赖:
npm install --save es6-promise
2. 调整TypeScript编译目标
Angular 6默认的编译目标可能是ES2015,但Safari对ES2015的部分语法支持不完善,建议把tsconfig.json里的编译目标改成ES5:
{ "compilerOptions": { "target": "es5", // 其他配置保持不变 } }
3. 检查Zone.js的兼容性
Zone.js在Safari里偶尔会有兼容问题,试试在polyfill.ts里补充Zone的Safari相关补丁:
import 'zone.js/dist/zone'; // 原有引入 // 添加Safari专属的Zone补丁 import 'zone.js/dist/webapis-media-query'; import 'zone.js/dist/webapis-notification';
如果问题依旧,可以尝试更新Zone.js到Angular 6对应的兼容版本(确保和Angular 6的版本匹配)。
4. 排查第三方库的转译问题
有些第三方依赖库可能使用了Safari不支持的ES特性,且没有被Angular CLI自动转译。你可以:
- 在
angular.json的build配置里添加允许的CommonJS依赖,避免转译报错:
"projects": { "your-project-name": { "architect": { "build": { "options": { "allowedCommonJsDependencies": [ "依赖库名称1", "依赖库名称2" ] } } } } }
- 检查是否有库需要被强制转译,在
tsconfig.app.json里把这些库从exclude列表中移除,确保它们被TypeScript转译为ES5。
5. 开启Safari开发者工具查看隐藏错误
虽然你说没有抛出错误,但Safari的控制台可能有被忽略的警告或隐性错误。请:
- 打开Safari偏好设置 -> 高级,勾选「显示开发菜单」
- 点击顶部菜单栏的「开发」->「显示错误控制台」
- 刷新页面,仔细查看「错误」和「警告」标签页,可能会发现资源加载失败、未定义的函数等线索。
按照以上步骤逐一排查,应该能解决Safari里的运行问题。
内容的提问来源于stack exchange,提问作者Narendar
相关产品推荐
相关产品推荐

