当我的脚本在Edge 15中运行以下代码时,我在JS控制台中看到Intl not available
错误:
new Date().toLocaleDateString()
我对此感到有点难过。它在Edge 14中运行得很好,我找不到任何对国际化API的引用突然从Edge 15中消失。
我不确定这是否是测试它的正确方法,但在控制台中运行window.hasOwnProperty("Intl")
实际上会返回true
。对我来说,这似乎表明Intl实际上是那里。
任何拥有更多JS技能的人都可以告诉我们这里真正发生了什么?
答案 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 code。 Intl.js
是javascript文件,在内部用于执行各种国际化特定操作。由于使用了Map
,因此在Intl.js
代码执行之前覆盖它(它会被懒惰地执行)会导致问题。这应该很快得到解决。
答案 2 :(得分:0)
正如ksp的回答所说,这是由Map覆盖后的Intl延迟加载引起的。因此,最简单的解决方法是在其他脚本运行之前强制它尽早初始化:
<html>
<head>
<script>Intl.DateTimeFormat</script>
...
以下是Chakra回购中的问题:https://github.com/Microsoft/ChakraCore/issues/3189