"Intl not available" 在边缘 15

"Intl not available" in Edge 15

当我的脚本在 Edge 15 中运行以下代码时,我在 JS 控制台中看到 Intl not available 错误:

new Date().toLocaleDateString()

我对此有点困惑。它在 Edge 14 中工作得很好,我找不到任何关于国际化 API 突然从 Edge 15 消失的参考。

我不确定这是否是测试它的正确方法,但控制台中 运行 window.hasOwnProperty("Intl") 实际上 returns true。对我来说,这似乎表明 Intl 实际上

任何具有更多 JS 技能的人都能够说出这里到底发生了什么?

正如ksp的回答所说,这是Map被覆盖后Intl延迟加载造成的。因此,最简单的解决方法是强制它在其他脚本 运行:

之前尽早初始化
<html>
  <head>
  <script>Intl.DateTimeFormat</script>
  ...

这是 Chakra 存储库中的问题:https://github.com/Microsoft/ChakraCore/issues/3189

确保您的 JS 代码没有重新定义标准 Map class.

我们遇到了几乎相同的问题,但使用的是 Intl.Collator 对象。因此我们无法使用 String.prototype.localeCompare("...", "locale")

您可以在 Edge 15 和其他浏览器中查看此代码笔以获取解释:https://codepen.io/kgorob/pen/pweaWV

P.S。 我不确定你的问题是因为 Map class 具体来说,也许是你正在重新定义的其他一些标准 JS class。

问题是因为 these lines in Chakracore codeIntl.js 是 javascript 内部用于执行各种国际化特定操作的文件。由于使用了 Map,在 Intl.js 代码执行之前覆盖它(它被延迟执行),导致问题。这应该很快就会得到解决。