Удалил ли IE11 условную компиляцию javascript?

Я определял версию движка IE Trident, используя условная компиляция javascript:

var ieVersion = undefined;
/*@cc_on
   ieVersion = Math.floor(@_jscript_version);
@*/

Это отлично работало для IE8, 9 и 10. В IE11 блок с условным комментарием не выполняется, если только я не использую средства разработки F12 для эмуляции IE10 (в этом случае он возвращает правильное значение 11).

Это сбивает с толку, поскольку страница MSDN при условной компиляции указывает, что она применяется к Internet Explorer 11. ( UPDATE 2015- 02-03: эта страница с тех пор была обновлена, чтобы явно указать, что ее содержимое не относится к IE11 в стандартном режиме.) Я not нашел любую информацию в Интернете, чтобы предположить, что IE11 не должен поддерживать условные комментарии.

Есть ли у кого-нибудь информация об этом? Может ли кто-нибудь воспроизвести это поведение в IE11?


Изменить: релевантность этого в поддержке IE <audio>. У меня есть веб-приложение, которое требует воспроизведения около 50 коротких (~ 1сек) аудиофайлов, которые должны воспроизводиться в (псевдо) случайном порядке и индивидуально после взаимодействия с пользователем. Проблемы различны:

  • IE9 имеет недокументированный предел из 41 audio элементов (объявленных в HTML или как объекты JS). Все последующие звуковые файлы молча загружаются и воспроизводятся. (Каждый из 41 элементов может перенаправить свой источник, но каждое второе повторное назначение также терпит неудачу. Мне бы хотелось увидеть код, лежащий в основе этих ошибок...)
  • IE10 и IE11 "заикаются" при воспроизведении коротких звуков: они играют небольшую долю секунды, затем останавливаются, а затем продолжаются. Эффект для конечного пользователя заключается в том, что звук непонятен. (audio имеют preload="auto" и сообщают ненулевой буфер.)

Естественно, нет никакого практического способа распознавания этих проблем, следовательно, обнаружения браузера. Я вообще чувствую, что пользовательский агент нюхает слишком рискованно для производственного кода; метод @cc_on казался более надежным.

Моим обходным решением для IE9 является сериализация состояния приложения до sessionStorage после 25-го звука, затем перезагрузите страницу и десериализуйте.

В IE10/11 мое обходное решение состоит в том, чтобы воспроизвести последние 90% аудио в 0 томах, что, похоже, заставляет IE фактически буферизовать файл.

Ответ 1

Да, IE11 удалил условную компиляцию javascript


google search, связанный в вопросе, возвращает этот вопрос в качестве третьего результата после двух страниц MSDN, также связанных выше. Это указывает на отсутствие лучшего источника, поэтому я считаю, что этот вопрос (включая комментарии) следует считать авторитетной ссылкой на то, что условная компиляция Javascript недоступна в IE11.

Я отправил отзыв на страницы MSDN, чтобы они были неправильными.

Обновление 2015-02-03: MSDN теперь подтверждает, что IE11 больше не поддерживает @cc_on.


Возможны следующие варианты обхода:

Обнаружение пользовательского агента

 /\([^)]*Trident[^)]*rv:([0-9.]+)/.exec(ua)

будет анализировать строку IE11 UA и возвращать "номер версии" в конце.

ScriptEngineMajorVersion() (спасибо @Teemu)

 var tridentVersion = 
     typeof ScriptEngineMajorVersion === "function" ?
         ScriptEngineMajorVersion() : undefined

должен корректно оцениваться во всех браузерах, но мы не можем гарантировать, что ScriptEngineMajorVersion не будет исключен без предупреждения, как это было в условной компиляции.


Спасибо всем комментаторам.