У меня есть документ HTML5, который использует медиа-запросы. Чтобы обслуживать пользователей более старых браузеров, я просто пытался эмулировать поведение в JS и использовать modernizr 2.5.3 (файл, который я вчера получил из загрузки HTML5 Boilerplate), чтобы выполнить mq-testing .
Еще одна вещь, которую я хотел бы сделать, это немного изменить интерфейс, если клиент поддерживает сенсорные события, используя простой Modernizr.touch
.
Я делаю это следующим образом:
//$window is $(window)
if ($window.width() < 575 || Modernizr.touch){
//change UI layout a little
}
if (Modernizr.touch){
//enable tap-navigation for touch devices
}
if (!Modernizr.mq('only all and (min-width: 575px)')){ //fix non-media query browsers
$window.resize(function(){
if ($window.width() < 575){
//add CSS
} else {
//remove CSS
}).trigger('resize');
}
Это прекрасно работает в Webkit (для мобильных и настольных ПК) и Firefox, но когда я пытаюсь открыть страницу в Opera (11.6) или в Internet Explorer (7-9), ад проваливается. События будут запускаться случайное количество раз, анимации jQuery будут останавливаться на полпути, честно говоря, я понятия не имею, что может происходить (хотя никаких ошибок консоли). Когда я удаляю скрипт modernizr из заголовка моей страницы, он работает просто отлично (за исключением, конечно, функции обнаружения ...).
Я также использую html5shiv
(я загружаю это после modernizr, но все еще в голове), как:
<!--[if lt IE 9]>
<script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script>
<![endif]-->
Я подозреваю, что это виновник в случае взлома IE, но, поскольку это не должно влиять на поведение Opera, я немного не в себе.
Я что-то не так делаю или это какая-то ошибка, и мне нужно искать другой способ обнаружения функции?
EDIT
Пока я пытался выяснить, что происходит, я обнаружил следующее: то, что кажется корнем всего зла, это просто тест медиа-запроса: Modernizr.mq('only all and (min-width: 575px)')
. Как только это называется, все сходит с ума. Я могу записать это в консоль и получу правильный результат, хотя, кажется, что-то ломается каким-то странным образом. Кроме того, я могу разбить работающую страницу (которая еще не вызывала этого), вызвав ее из консоли.
РЕДАКТИРОВАТЬ № 2 :
При поиске альтернативного способа тестирования функций я обнаружил эту библиотеку в dev.opera, которая (вау!), Похоже, работает нормально в Opera. Тем не менее, он не работает в IE (Webkit и Firefox в порядке), так как жалуется на:
style.innerText = '@media ' + str + ' { #'+id+' { display:none !important; } }';
Мех.
РЕДАКТИРОВАТЬ № 3 :
Итак, я только что перешел на модернизированную версию 2.0.6, и теперь все отлично работает во всех браузерах. Хотя я до сих пор не уверен, что это ошибка или я что-то не так делаю, поэтому я подожду некоторое время, прежде чем сам на это отвечу.