Комментарии 34
а если шестой ИЕ с отключенными скриптами? ;)
+2
Может стоит в шапку дописать, что предполагаются включенные скрипты у клиента.
Как и сегодня пишутся обходные пути такому явлению, точно так же и тут — писать альтернативную загрузку скриптов в отдельном файле.
Но я все же верю в светлое будущее, где клиенты как минимум не будут выключать скрипты, а еще лучше обновят свои браузеры. :)
Как и сегодня пишутся обходные пути такому явлению, точно так же и тут — писать альтернативную загрузку скриптов в отдельном файле.
Но я все же верю в светлое будущее, где клиенты как минимум не будут выключать скрипты, а еще лучше обновят свои браузеры. :)
0
я имел ввиду писать альтернативную загрузку стилей*
Тут комментарии не редактируются? :)
Тут комментарии не редактируются? :)
0
Вообще, отсутствие JS у 1% клиентов по статистике (многие путают с 20% Java), да и те, наверно, просто с мобильников древних лезут
0
Крайне не рекомендую пользоваться таким подходом.
Привязывать верстку к классам, определяемым скриптом — практика такая же плохая, как и просто верстка с использованием javascript: потому что при отключенном js страница разъедется. В то время как научиться верстать кроссбраузерно не так уж и сложно.
А использовать проверку класса у body, чтобы скорректировать работу javascript вообще бессмысленно. Сохраните текущий браузер, версию, платформу и куки в переменных и обращайтесь к ним. Зачем делать более дорогостоящую и менее очевидную операцию $('body').hasClass('jscookie'), когда можно просто запросить navigator.cookieEnabled?
Привязывать верстку к классам, определяемым скриптом — практика такая же плохая, как и просто верстка с использованием javascript: потому что при отключенном js страница разъедется. В то время как научиться верстать кроссбраузерно не так уж и сложно.
А использовать проверку класса у body, чтобы скорректировать работу javascript вообще бессмысленно. Сохраните текущий браузер, версию, платформу и куки в переменных и обращайтесь к ним. Зачем делать более дорогостоящую и менее очевидную операцию $('body').hasClass('jscookie'), когда можно просто запросить navigator.cookieEnabled?
+3
Это правильно, лучше научиться верстать правильно.
Но если люди кому это плохо дается, те кто до этого еще не дорос, или просто желающие быстро сделать работу.
Всё зависит от задачи. На практике применял это 2 раза на серьезных сайтах и всё было хорошо, потому что писались отступные пути (подгрузка доп.стилевых файлов если отключены скрипты).
Но если люди кому это плохо дается, те кто до этого еще не дорос, или просто желающие быстро сделать работу.
Всё зависит от задачи. На практике применял это 2 раза на серьезных сайтах и всё было хорошо, потому что писались отступные пути (подгрузка доп.стилевых файлов если отключены скрипты).
+2
Я тоже сторонник кроссбраузерной верстки. В крайнем случае, можно использовать условные комментарии для IE, и это очень в редких случаях. За несколько лет ни разу не столкнулся с такой проблемой, чтобы подобный скрипт смог пригодиться.
0
Для отключенного яваскрипта можно изначально добавлять атрибут (или класс) nojs и при наличии js менять его на другой (или убирать) — распространенная техника. Применяется, например, в html5boilerplate.
0
И ещё по реализации. Some people, when confronted with a problem, think «I know, I'll use regular expressions...»
В том же jQuery аналогичный функционал написан гораздо понятнее:
var b = [(!(/opera|webtv/i.test(ua))&&/msie\s(\d)/.test(ua))?('ie ie'+RegExp.$1 + (is('trident')&&is('msie 7.0') ? ' compat':'')):is('firefox/2')?g+' ff2':is('firefox/3')?g+' ff3':is('firefox/4')?g+' ff5':is('firefox/5')?g+' ff5':is('gecko/')?g:/opera(\s|\/)(\d+)/.test(ua)?'opera opera'+RegExp.$2:is('konqueror')?'konqueror':is('chrome')?w+' '+s+' chrome':is('applewebkit/')?w+' '+s+(/version\/(\d+)/.test(ua)?' '+s+RegExp.$1:''):is('mozilla/')?g:'',is('j2me')?'mobile':is('iphone')?'iphone':is('ipod')?'ipod':is('mac')?'mac':is('darwin')?'mac':is('webtv')?'webtv':is('win')?'win'+(is('windows nt 5.1')?' xp':(is('windows nt 5.1')?' vista':(is('windows nt 6.1')?' win7':''))):is('freebsd')?'freebsd':(is('x11')||is('linux'))?'linux':'','js'];
Now they have two problems.В том же jQuery аналогичный функционал написан гораздо понятнее:
// Useragent RegExp
rwebkit = /(webkit)[ \/]([\w.]+)/,
ropera = /(opera)(?:.*version)?[ \/]([\w.]+)/,
rmsie = /(msie) ([\w.]+)/,
rmozilla = /(mozilla)(?:.*? rv:([\w.]+))?/;
ua = ua.toLowerCase();
var match = rwebkit.exec( ua ) ||
ropera.exec( ua ) ||
rmsie.exec( ua ) ||
ua.indexOf("compatible") < 0 && rmozilla.exec( ua ) ||
[];
return { browser: match[1] || "", version: match[2] || "0" };
Да, он не определяет платформу, но его легко модифицировать для этой цели. А если придется править ваш код, только на разбор регекспов часа два уйдёт.+3
1) Код для тех, кто обязывает посетителей включать скрипты. Тому есть много популярных и неочень проектов. Без них нынче не все так гладко, а значит скрипт можно применять.
2) Предложение на jQuery может и будет лучше, но есть люди категорически отказывающиеся от сторонних библиотек, поэтому код написан на чистом джаваскрипте, аналоги на платформах в комментах это только плюс к теме
3) С регулярками проблем никаких нет, большинство задач уже решено в функции — остается только использовать
4) Все дело вкуса. Кто-то пыхтит над правильными стилями и тратит время, кто-то использует вспомогательные инструменты как этот и другие, кто-то как из коммента ниже — использует условные комментарии или доп. файлы стилей.
С iscookie да, косяк. Можно (нужно) и нативным путем обращаться. :)
2) Предложение на jQuery может и будет лучше, но есть люди категорически отказывающиеся от сторонних библиотек, поэтому код написан на чистом джаваскрипте, аналоги на платформах в комментах это только плюс к теме
3) С регулярками проблем никаких нет, большинство задач уже решено в функции — остается только использовать
4) Все дело вкуса. Кто-то пыхтит над правильными стилями и тратит время, кто-то использует вспомогательные инструменты как этот и другие, кто-то как из коммента ниже — использует условные комментарии или доп. файлы стилей.
С iscookie да, косяк. Можно (нужно) и нативным путем обращаться. :)
0
НЛО прилетело и опубликовало эту надпись здесь
Впервые вижу айтишника, который пишет «движёк», да ещё и без точек над «ё», вместо «движок».
+11
а чем cssua.js плох?
0
> var w = 'webkit'; // Chrome
> var s = 'safari'; // Safari
ШТО.
> var s = 'safari'; // Safari
ШТО.
+2
Лично я сейчас использую более надёжный метод (пример его есть у html5boilerplate.com/):
Работает без скриптов, надёжно определяет версии IE (для остальных браузеров хаки как-то давно не требуются), спасает от лишних запросов.
<!doctype html>
<!--[if lt IE 7]> <html class="no-js ie6 oldie" lang="en"> <![endif]-->
<!--[if IE 7]> <html class="no-js ie7 oldie" lang="en"> <![endif]-->
<!--[if IE 8]> <html class="no-js ie8 oldie" lang="en"> <![endif]-->
<!--[if gt IE 8]><!--> <html class="no-js" lang="en"> <!--<![endif]-->
<head>
<script>
(function(H){H.className=H.className.replace(/\bno-js\b/,'js')})(document.documentElement);
</script>
...
</head>
Работает без скриптов, надёжно определяет версии IE (для остальных браузеров хаки как-то давно не требуются), спасает от лишних запросов.
+7
Я уже давно в нескольких проектах пользуюсь серверной реализацией на php: pastebin.com/3bd4CzX1
+1
Еще один повод перейти на HTML5 =)
+1
Ещё один повод покритиковать HTML 5 за излишние вольности. У элемента
По смыслу, тут подошёл бы метатег (но от него потом хрен обратишься к элементам внутри
html
и не должно быть атрибута class
— по двум причинам. Во-первых, это противоречит самому понятию класса, его семантике, то есть духу самой же спецификации HTML. Класс предназначен для выделения и адресации некой совокупности элементов, а данный элемент уже уникален и таким образом доступен для адресации. Во-вторых, стилизуем-то мы всё равно не html
, а body
.По смыслу, тут подошёл бы метатег (но от него потом хрен обратишься к элементам внутри
body
, во всяком случае, пока CSS не дорос до XPath) или атрибут data-*
, а ещё лучше, если бы в CSS был псевдокласс типа :browser()
. Ну, это так, мечты.0
Я верстаю только под нормальные браузеры и IE7 (IE6 только по желанию заказчика, к примеру если сайт для сотрудников банка).
0
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
CBS или упрощенный вид стилизирования и написания скриптов в ваших проектах