Edge 15中的“Intl not available”

时间:2017-06-01 09:10:35

标签: javascript internationalization microsoft-edge ecmascript-intl

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

new Date().toLocaleDateString()

我对此感到有点难过。它在Edge 14中运行得很好,我找不到任何对国际化API的引用突然从Edge 15中消失。

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

任何拥有更多JS技能的人都可以告诉我们这里真正发生了什么?

3 个答案:

答案 0 :(得分:3)

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

我们遇到了几乎相同的问题,但改为使用Intl.Collator对象。由于这个原因,我们无法使用String.prototype.localeCompare("...", "locale")

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

P.S。 我不确定你的问题是因为Map类是否具体,或许它是你正在重新定义的其他标准JS类。

答案 1 :(得分:1)

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

答案 2 :(得分:0)

正如ksp的回答所说,这是由Map覆盖后的Intl延迟加载引起的。因此,最简单的解决方法是在其他脚本运行之前强制它尽早初始化:

<html>
  <head>
  <script>Intl.DateTimeFormat</script>
  ...

以下是Chakra回购中的问题:https://github.com/Microsoft/ChakraCore/issues/3189