JavaScript

индекс
246,46

Самый короткий способ определения браузера IE (влючая IE.8)

IE='\v'=='v'

Это решение является победителем в соревновании на выявление самого короткого способа определения IE.
+106
29 января 2009, 09:33
76

комментарии (59)

+17
anp #
Все гениальное, конечно просто.
Но нельзя ли немного поподробнее, для тех кто в танке?
Что с этим делать?
+6
Slon #
Что бы определить какой броузер использует посетитель вашего сайта (это может понадобиться для разных целей, например, для вёрстки) в документ вставляем скрипт:

<script type="text/javascript">
var IE='\v'=='v';
if(IE) {
// тут пишем обработчик для IE броузера
}
</script>
+5
anp #
А в чем отличие логики IE при обработке '\v'=='v'?
–6
Steward #
для IE возвращается true, во всех остальных браузерах false
+1
anp #
В этом и вопрос почему '\v'=='v', а не '\a'=='a' или '\b'=='b'
0
maxshopen #
+2
gefix #
Видимо вставлять в JavaScript;
0
maxshopen #
Не, ну понятно куда вставлять, но в чем фишка?
Я так понимаю, разница в обработке escape-символов?

Кстати alert('\x'=='x') выдает true в остальных браузерах
0
Snipe #
ндя, чем v так кардинально отличается?
+11
maxshopen #
По стандарту слэш перед символом, игнорируется, если это не escape-последовательность. Поэтому \x и x — одно и тоже, а вот \v — это вертикальная табуляция. IE видимо её не поддерживает, отсюда и различие.
–1
Garrett #
Точнее наоборот, \v есть только в IE
+3
maxshopen #
Если бы было наоборот, то '\v'=='v' в IE давало бы false, чего мы как раз не наблюдаем.
+1
Garrett #
Да точно, чего-то я не внимательный сегодня -_-
(или привык к '!=')
0
maxshopen #
Хе, ну вам то минусы поставили, я еще могу понять за что (хотя вы признали ошибку, за что я постарался исправить положение), но вот интересно за что мне влепили, гы-гы :)

0
Slon #
Это проверка только на IE или !IE.
0
sha1dy #
а для тех кто в танке — на каком баге/хаке это основано?
+8
RayZ #
Это не хак и не баг, это фича ;)
0
Slon #
Добавил первоисточник. Там есть ответ на ваш вопрос.
0
reinventer #
просто все броузеры кроме IE считают "\v" спецсимволом вертикальной табуляции
–1
Garrett #
наоборот =)
–3
Garrett #
Извените, ошибся, невнимательный сегодня…
0
RayZ #
IE=!!top.execScript
0
Slon #
но этот вариант длинее будет :)
0
tenshi #
msdn.microsoft.com/en-us/library/abd85z98(VS.80).aspx
НЛО прилетело и опубликовало эту надпись здесь
+20
indaclu6 #
== == ===
НЛО прилетело и опубликовало эту надпись здесь
+21
indaclu6 #
Вы у меня спрашиваете не поняли ли Вы? ;)
НЛО прилетело и опубликовало эту надпись здесь
0
indaclu6 #
Посмотрел на вашу карму… Думаю многие вас не понимают. А это наверняка таблица раздела одного из ваших дисков.
+1
maxshopen #
он ошибся, наверно хотел сказать == === === :))
+2
indaclu6 #
Не я не ошибался :) я так и хотел написать :)
+4
homm #
«Не вы» не ошибались, а вы, стало быть, ошибались? Или нет?
Раз издеваетесь над другими, пишите сами грамотно.
+4
indaclu6 #
Дело в том, что может быть в написанном примере и есть ошибка, но я не ошибся в том что я хотел написать. Я хотел как раз написать "== == ===" ;)
НЛО прилетело и опубликовало эту надпись здесь
–5
badmonday #
|/_
0
_\
:===~
_ /

Простите за офтоп :)
+4
Captcha #
Что это за пепяка7
+2
badmonday #
Парсер скушал пробелы :(
До убиения парсером это была рожица с сигаретой. Типо штука юмора, еще раз извините.
0
Shemet #
Похоже на индейца который едет влево на котких лыжах, с толстыми лыжными палками.
0
BisnoyZakat #
Там кстати по ссылке целое соревнование на самый короткий способ… :) зря об этом не написали.
0
Snipe #
Видимо это связано со спец. символами.
\v — vertical tab
–1
asci #
а это чем то хуже лучще условиев-комментариев?
0
Steward #
это не хуже… это для JavaScript-гиков :)
–1
asci #
я наверно понял ошибку свою) этот метод использовать лучше в скрипте, а условия-комментарии в верстке
0
reinventer #
Хоть что-то полезное можно извлечь от наплевательского отношения к стандартам со стороны Microsoft :)
+3
Captcha #
А вот в новых версиях МС пофиксит это и придётся всем скрипты переписывать =)
+2
Cancel #
Ужасно будет, если этот хак расползётся по интернету.
0
maxshopen #
Почему? В IE8 он работает. И дальше наверняка будет.
Хотя я сам считаю его некрасивым, встретив где-то в чужом коде, я, как наверно и многие, буду долго чесать репу, пытаясь понять что это такое.
0
Zeroglif #
Это баг, давно известный, признанный MS и даже попавший первым в Lakshman-овский «список отличий». В первых же рядах этот баг могут и прибить, никого не спросясь…
+1
noise #
самый короткий способ определения должен иметь большой комментарий «как это оно так работает».
–1
skorney #
Имхо круто, и пофиксят не скоро =) Теперь ждемс пока jQuery или MooTools узнает у MS что к чему и начнет применять
–1
Zeroglif #
Не страшно, интернет прекрасно живёт, проверяя браузеры по UA-строкам. Что ужаснее — вопрос. ;)
+1
iZevs #
Когда-то давно одним из способов проверки на IE был if(document.all)
И всё работало до тех пока mozilla и safari не сделали поддерку all.
С любым хаком может произойти тоже самое.
Надеюсь все понимают что это было просто прикольное совевнование и никто не станет использовать хаки в реальных скриптах.
+8
Raz0r #
Победитель конкурса Gareth Heyes сегодня опубликовал подборку самых коротких хаков для определения остальных браузеров:
www.thespanner.co.uk/2009/01/29/detecting-browsers-javascript-hacks/
0
hlomzik #
IE//@cc_on=1
и ещё несколько вариантов у Эдвардса, которые точно будут работать и в ие9.
0
dryu #
Нашли ещё более короткий способ определение IE:

if(!+"\v1") // true only in IE
0
Svetloff #
И в каком месте он короче? !+"\v1"(7 знаков) \v==v(5 знаков)
0
HeadFore #
"\v"==«v» — 9 знаков
0
valanchik #
если, для справки, вот так можно определить браузер:

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» };
}

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.