"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