"Intl not available" в Edge 15
Я вижу ошибку Intl not available
в консоли JS, когда мой script запускает следующий код в Edge 15:
new Date().toLocaleDateString()
Я немного в шоке от этого. Он отлично работает в Edge 14, и я не могу найти ссылку на API интернационализации, внезапно исчезающий с Edge 15.
Я не уверен, что это правильный способ протестировать его, но запуск window.hasOwnProperty("Intl")
в консоли фактически возвращает true
. Для меня это, по-видимому, указывает на то, что Intl действительно существует.
Кто-нибудь, у кого больше навыков JS, способный рассказать, что на самом деле происходит здесь?
Ответы
Ответ 1
Убедитесь, что ваш JS-код не переопределяет стандартный класс Map
.
У нас была почти такая же проблема, но с объектом Intl.Collator
. Из-за этого мы не могли использовать String.prototype.localeCompare("...", "locale")
.
Вы можете посмотреть этот код в Edge 15 и в других браузерах для объяснения: https://codepen.io/kgorob/pen/pweaWV.
P.S.
Я не уверен, что ваша проблема связана именно с классом Map
, возможно, это какой-то другой стандартный класс JS, который вы переопределяете.
Ответ 2
Проблема связана с этими строками в коде Chakracore. Intl.js
- это файл javascript, который используется внутренне для выполнения различных операций с интернационализацией. Поскольку используется Map
, выполняется надписание его перед тем, как выполняется код Intl.js
(выполняется лениво), вызывает проблему. Это должно быть рассмотрено в ближайшее время.
Ответ 3
Как говорит ksp ответ, это вызвано Intl lazy-load после перезагрузки карты. Поэтому самым легким обходным путем является просто заставить его инициализировать раньше, до запуска других скриптов:
<html>
<head>
<script>Intl.DateTimeFormat</script>
...
Вот проблема в реплике Chakra: https://github.com/Microsoft/ChakraCore/issues/3189