当前位置: 首页 > 工具软件 > Zone.js > 使用案例 >

Error: Zone.js has detected that ZoneAwarePromise `(window|global).Promise` has been overwritten...

孙胜泫
2023-12-01

错误出现原因:

今天突然被告知自己写的Angular项目在微软的Edge里显示不了了,而且360浏览器也不行了。

后来发现是浏览器版本问题,我的是最新版显示没有问题,而别人用的浏览器版本较旧【这里的较旧指的相对于我的最新版本的来说的】。

让用户更新是一个可行的方案,还有就是我们开发者看看怎么搞一下了。

  • 首先打开旧Edge版本控制台上,控制台上报了一个错误:

    Error: Zone.js has detected that ZoneAwarePromise (window|global).Promise has been overwritten. Most likely cause is that a Promise polyfill has been loaded after Zone.js (Polyfilling Promise api is not necessary when zone.js is loaded. If you must load one, do so before loading zone.js.)

    • 谷歌是这么翻译上面英语的:

      错误:Zone.js检测到ZoneAwarePromise(window | global).Promise已被覆盖。 最可能的原因是在Zone.js之后加载了Promise polyfill(加载zone.js时不需要填充Promise api。如果必须加载,则在加载zone.js之前执行。)

解决方案:

  • 错误很明显了,在Zone.js之后加载了Promise polyfill。改的方向就是在zone.js之前加载它。
    • 网上的方法我试了一下,说是把polyfill.tsimport 'zone.js/dist/zone'的这一行提到main.ts里,我试了一下,没解决。
  • 说一个我测试可行的方法:
    • polyfill.tsimport 'zone.js/dist/zone'这一行前面,引入import 'core-js/es/promise'

问题解决。

当然我这个解决方案,可能存在特殊性,如果你有更好的方法,欢迎留言。

 类似资料: