Я хотел использовать библиотеку Modernizr JS для определения некоторых свойств браузера, чтобы определить, какой контент показывать или не показывать.
У меня есть приложение Pano2VR которое выводит как HTML5, так и SWF. Мне нужен HTML5 для пользователей устройств iOS.
Однако IE вообще не отображает этот вывод «HTML5». Похоже, в их выводе используются преобразования CSS3 3D и WebGL, один или несколько из которых явно не поддерживаются в IE9.
Итак, для этих пользователей мне нужно отобразить версию Flash. Я планировал использовать IFRAME и либо передать SRC через сценарий Modernizr, либо документ. Написать правильный код IFRAME в зависимости от браузера.
Все это приводит к тому, как мне использовать Modernizr для определения IE или не IE? Или обнаруживать преобразования CSS в 3d?
Или есть другой способ сделать это?
Browser identification based on detecting the user agent string is unreliable and is not recommended, as the user agent string is user configurable.
Вы можете использовать Modernizr для обнаружения просто IE или не IE, проверив SVG SMIL поддержку анимации .
Если вы включили обнаружение функций SMIL в настройку Modernizr, вы можете использовать простой подход CSS и нацелить класс .no-smil, который Modernizr применяет к элементу html :
html.no-smil { /* IE/Edge specific styles go here - hide HTML5 content and show Flash content */ }
В качестве альтернативы вы можете использовать Modernizr с простым подходом JavaScript, например:
if ( Modernizr.smil ) { /* set HTML5 content */ } else { /* set IE/Edge/Flash content */ }
Имейте в виду, что IE / Edge когда-нибудь может поддерживать SMIL , но в настоящее время это не планируется.
Для справки, вот ссылка на таблицу совместимости SMIL на caniuse.com .
источник
Обнаружение 3D-преобразований CSS
Modernizr может обнаруживать 3D-преобразования CSS , да. Правдивость
Modernizr.csstransforms3d
скажет вам, поддерживает ли их браузер.Вышеупомянутая ссылка позволяет вам выбрать, какие тесты включить в сборку Modernizr, и там будет доступен нужный вам вариант.
Обнаружение IE в частности
В качестве альтернативы , как ответил user356990, вы можете использовать условные комментарии, если ищете только IE и IE. Вместо создания глобальной переменной вы можете использовать
<html>
трюк условных комментариев HTML5 Boilerplate для назначения класса:<!--[if lt IE 7]> <html class="no-js lt-ie9 lt-ie8 lt-ie7"> <![endif]--> <!--[if IE 7]> <html class="no-js lt-ie9 lt-ie8"> <![endif]--> <!--[if IE 8]> <html class="no-js lt-ie9"> <![endif]--> <!--[if gt IE 8]><!--> <html class="no-js"> <!--<![endif]-->
Если у вас уже инициализирован jQuery, вы можете просто проверить его с помощью
$('html').hasClass('lt-ie9')
. Если вам нужно проверить, в какой версии IE вы находитесь, чтобы можно было условно загрузить либо jQuery 1.x, либо 2.x, вы можете сделать что-то вроде этого:myChecks.ltIE9 = (function(){ var htmlElemClasses = document.querySelector('html').className.split(' '); if (!htmlElemClasses){return false;} for (var i = 0; i < htmlElemClasses.length; i += 1 ){ var klass = htmlElemClasses[i]; if (klass === 'lt-ie9'){ return true; } } return false; }());
NB. Условные комментарии IE поддерживаются только до IE9 включительно. Начиная с IE10, Microsoft рекомендует использовать обнаружение функций, а не обнаружение браузера.
Какой бы метод вы ни выбрали, вы должны протестировать
if ( myChecks.ltIE9 || Modernizr.csstransforms3d ){ // iframe or flash fallback }
||
Конечно, не воспринимайте это буквально.источник
Если вы ищете JS-версию (с использованием комбинации обнаружения функций и сниффинга UA) того, для чего использовался шаблон html5:
var IE = (!! window.ActiveXObject && +(/msie\s(\d+)/i.exec(navigator.userAgent)[1])) || NaN; if (IE < 9) { document.documentElement.className += ' lt-ie9' + ' ie' + IE; }
источник
Что ж, после дополнительных исследований по этой теме я решил использовать следующее решение для таргетинга на IE 10+. Поскольку IE10 и 11 - единственные браузеры, которые поддерживают медиа-запрос -ms-high-Contrast, это хороший вариант без JS:
@media screen and (-ms-high-contrast: active), screen and (-ms-high-contrast: none) { /* IE10+ specific styles go here */ }
Прекрасно работает.
источник
Уловки CSS есть хорошее решение для IE 11:
http://css-tricks.com/ie-10-specific-styles/
.NET и Trident / 7.0 уникальны для IE, поэтому могут использоваться для обнаружения IE версии 11.
Затем код добавляет строку User Agent в тег html с атрибутом data-useragent, так что IE 11 может быть специально нацелен ...
источник
Мне нужно было обнаружить IE по сравнению с большинством всего остального, и я не хотел зависеть от строки UA. Я обнаружил, что используя
es6number
Modernizr делает именно то, что я хотел. Меня это не особо беспокоит, поскольку я не ожидаю, что IE когда-либо будет поддерживать ES6 Number. Итак, теперь я знаю разницу между любой версией IE и Edge / Chrome / Firefox / Opera / Safari.Подробнее здесь: http://caniuse.com/#feat=es6-number
Обратите внимание, что меня не особо беспокоят ложные негативы Opera Mini. Вы, возможно.
источник
Вы можете использовать этот
< !-- [if IE] >
прием для установки глобальной переменной js, которая затем будет протестирована в вашем обычном коде js. Немного некрасиво, но мне понравилось.источник