Я определял версию движка 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 фактически буферизовать файл.