Комментарии 61
Все гениальное, конечно просто.
Но нельзя ли немного поподробнее, для тех кто в танке?
Что с этим делать?
Но нельзя ли немного поподробнее, для тех кто в танке?
Что с этим делать?
Что бы определить какой броузер использует посетитель вашего сайта (это может понадобиться для разных целей, например, для вёрстки) в документ вставляем скрипт:
<script type="text/javascript">
var IE='\v'=='v';
if(IE) {
// тут пишем обработчик для IE броузера
}
</script>
Видимо вставлять в JavaScript;
Не, ну понятно куда вставлять, но в чем фишка?
Я так понимаю, разница в обработке escape-символов?
Кстати alert('\x'=='x') выдает true в остальных браузерах
Я так понимаю, разница в обработке escape-символов?
Кстати alert('\x'=='x') выдает true в остальных браузерах
ндя, чем v так кардинально отличается?
По стандарту слэш перед символом, игнорируется, если это не escape-последовательность. Поэтому \x и x — одно и тоже, а вот \v — это вертикальная табуляция. IE видимо её не поддерживает, отсюда и различие.
Это проверка только на IE или !IE.
а для тех кто в танке — на каком баге/хаке это основано?
IE=!!top.execScript
msdn.microsoft.com/en-us/library/abd85z98(VS.80).aspx
НЛО прилетело и опубликовало эту надпись здесь
== == ===
НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь
|/_
0
_\
:===~
_ /
Простите за офтоп :)
0
_\
:===~
_ /
Простите за офтоп :)
Там кстати по ссылке целое соревнование на самый короткий способ… :) зря об этом не написали.
Видимо это связано со спец. символами.
\v — vertical tab
\v — vertical tab
а это чем то хуже лучще условиев-комментариев?
Хоть что-то полезное можно извлечь от наплевательского отношения к стандартам со стороны Microsoft :)
А вот в новых версиях МС пофиксит это и придётся всем скрипты переписывать =)
Ужасно будет, если этот хак расползётся по интернету.
Почему? В IE8 он работает. И дальше наверняка будет.
Хотя я сам считаю его некрасивым, встретив где-то в чужом коде, я, как наверно и многие, буду долго чесать репу, пытаясь понять что это такое.
Хотя я сам считаю его некрасивым, встретив где-то в чужом коде, я, как наверно и многие, буду долго чесать репу, пытаясь понять что это такое.
Это баг, давно известный, признанный MS и даже попавший первым в Lakshman-овский «список отличий». В первых же рядах этот баг могут и прибить, никого не спросясь…
самый короткий способ определения должен иметь большой комментарий «как это оно так работает».
Имхо круто, и пофиксят не скоро =) Теперь ждемс пока jQuery или MooTools узнает у MS что к чему и начнет применять
Не страшно, интернет прекрасно живёт, проверяя браузеры по UA-строкам. Что ужаснее — вопрос. ;)
Когда-то давно одним из способов проверки на IE был if(document.all)
И всё работало до тех пока mozilla и safari не сделали поддерку all.
С любым хаком может произойти тоже самое.
Надеюсь все понимают что это было просто прикольное совевнование и никто не станет использовать хаки в реальных скриптах.
И всё работало до тех пока mozilla и safari не сделали поддерку all.
С любым хаком может произойти тоже самое.
Надеюсь все понимают что это было просто прикольное совевнование и никто не станет использовать хаки в реальных скриптах.
Победитель конкурса Gareth Heyes сегодня опубликовал подборку самых коротких хаков для определения остальных браузеров:
www.thespanner.co.uk/2009/01/29/detecting-browsers-javascript-hacks/
www.thespanner.co.uk/2009/01/29/detecting-browsers-javascript-hacks/
IE//@cc_on=1
и ещё несколько вариантов у Эдвардса, которые точно будут работать и в ие9.
и ещё несколько вариантов у Эдвардса, которые точно будут работать и в ие9.
Нашли ещё более короткий способ определение IE:
if(!+"\v1") // true only in IE
if(!+"\v1") // true only in IE
если, для справки, вот так можно определить браузер:
function getBrowser() {
var ua = navigator.userAgent.toLowerCase(),
rwebkit = /(webkit)[ \/]([\w.]+)/,
ropera = /(opera)(?:.*version)?[ \/]([\w.]+)/,
rmsie = /(msie) ([\w.]+)/,
rmozilla = /(mozilla)(?:.*? rv:([\w.]+))?/;
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].match(/^([\d]+).*$/)[1] || «0» };
}
function getBrowser() {
var ua = navigator.userAgent.toLowerCase(),
rwebkit = /(webkit)[ \/]([\w.]+)/,
ropera = /(opera)(?:.*version)?[ \/]([\w.]+)/,
rmsie = /(msie) ([\w.]+)/,
rmozilla = /(mozilla)(?:.*? rv:([\w.]+))?/;
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].match(/^([\d]+).*$/)[1] || «0» };
}
На всякий случай, в IE11 этот способ (IE='\v'=='v') уже не работает
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Самый короткий способ определения браузера IE (влючая IE.8)