Internet Explorer 10 не пытается чтобы больше читать условные комментарии. Это означает, что он будет обрабатывать условные комментарии так же, как и любой другой браузер: как обычные комментарии HTML, предназначенные для полного игнорирования. Глядя на разметку, приведенную в вопросе, в качестве примера, все браузеры, включая IE10, будут полностью игнорировать части комментариев, выделенные серым цветом. В стандарте HTML5 не упоминается синтаксис условных комментариев, и именно поэтому они решили прекратить его поддержку в IE10.
Однако обратите внимание, что условная компиляция в JScript по-прежнему поддерживается, поскольку показано в комментариях, а также в более поздних ответах. Это не исчезнет и в окончательной версии, в отличие от jQuery.browser
. И, конечно же, само собой разумеется, что сниффинг пользовательского агента остается таким же хрупким, как и всегда, и его нельзя использовать ни при каких обстоятельствах.
Если вам действительно необходимо настроить таргетинг на IE10, либо используйте условную компиляцию, которая может еще получить поддержку в ближайшем будущем, либо - если вы можете ей помочь - используйте библиотеку обнаружения функций, такую как Modernizr вместо (или вместе с) определения браузера. Если ваш вариант использования не требует noscript или размещения IE10 на стороне сервера, сниффинг пользовательского агента будет скорее головной болью, чем жизнеспособным вариантом.
Звучит довольно громоздко, но помните, что, будучи современным браузером, который полностью соответствует сегодняшним веб-стандартам 1, предполагая, что вы написали совместимый код, который полностью соответствует стандартам, вы не должны em> должны выделить специальный код для IE10, если это не является абсолютно необходимым, т.е. он должен напоминать другие браузеры с точки зрения поведения и рендеринга. 2 И это звучит надуманным, учитывая историю IE, но сколько раз вы ожидали, что Firefox или Chrome будут вести себя одинаково, только чтобы вас встретили с тревогой?
- Firefox уже много лет не поддерживает
box-sizing
без префикса
- Firefox исторически имел странное поведение структуры, и это тоже было дело в течение многих лет
- Firefox отказывается вести себя разумно, когда дело доходит до позиционирования ячеек таблиц, ссылаясь на неопределенное поведение в качестве оправдания, в то время как другие браузеры, похоже, отлично справляются с этим
- В Safari и Chrome есть много of проблема с определенные CSS селекторы, иногда с исправляет, что действительно вернет вас в старые добрые времена IE5, IE6 и IE7
- У Chrome, похоже, много проблем в отделе перерисовки в целом, например, некорректная перекомпоновка макетов при обновлении стилей мультимедиа; похоже, что половину ошибок Chrome можно обойти просто и только путем принудительной перерисовки, опять же на уровне IE5 / 6/7
- Известно, что некоторые разновидности WebKit откровенно лгут о поддержке определенных функций, что означает, что они на самом деле не работают с механизмами обнаружения функций.
Если у вас действительно есть законная причина для таргетинга на определенные браузеры, во что бы то ни стало вынюхивайте их с помощью других предоставленных вам инструментов. Я просто говорю, что вам будет гораздо труднее найти такую причину сегодня, чем то, что было раньше, и на самом деле это просто не то, на что вы можете положиться.
1 Не только IE10, но IE9 и даже IE8, который обрабатывает большую часть зрелого стандарта CSS2.1 намного лучше, чем Chrome, просто потому, что IE8 был так сосредоточен на соблюдении стандартов (в то время CSS2 .1 уже был довольно стабилен с незначительными отличиями от сегодняшней рекомендации), в то время как Chrome кажется не более чем полуобработанной технической демонстрацией передовых псевдостандартов.
2 И я могу быть предвзятым, когда говорю это, но это чертовски важно. Если ваш код работает в других браузерах, но не в IE, вероятность того, что это проблема вашего собственного кода, а не IE10, гораздо лучше, чем, скажем, 3 года назад с предыдущими версиями IE. Опять же, я могу быть предвзятым, но давайте будем честными: не так ли? Просто посмотрите на свои комментарии.
person
BoltClock
schedule
28.03.2012
@cc_on
a >. Итак, чтобы определить, поддерживается ли IE10 или нет, вы можете использовать следующий код:<!--[if !IE]><!--><script>if(/*@cc_on!@*/false){document.documentElement.className+=' ie10';}</script><!--<![endif]-->
. (Я разместил это как комментарий, поскольку IE все еще находится в разработке, поэтому неизвестно, поддерживает ли окончательная версия и эту функцию) - person Rob W   schedule 13.05.2012<script>if(Function('/*@cc_on return document.documentMode===10@*/')()){document.documentElement.className+=' ie10';}</script>
Улучшения: не требует условных комментариев; работает даже при сжатии / обработке удаления комментариев; класс для ie11 не добавлен; будет работать с ie11, работающим в режиме совместимости с ie10; не требует отдельного тега скрипта (может быть просто добавлен в другой javascript в заголовке). - person robocat   schedule 07.12.2012if(document.documentMode) document.documentElement.className+=' ie'+document.documentMode+'mode';
- которое решает 90% проблем (иногда режимы совместимости выходят из строя, и в этом случае вам потребуется еще один уровень исправления помимо этого). - person robocat   schedule 07.12.2012