Как стать автором
Обновить

Комментарии 61

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

<script type="text/javascript">
var IE='\v'=='v';
if(IE) {
// тут пишем обработчик для IE броузера
}
</script>
А в чем отличие логики IE при обработке '\v'=='v'?
НЛО прилетело и опубликовало эту надпись здесь
В этом и вопрос почему '\v'=='v', а не '\a'=='a' или '\b'=='b'
Видимо вставлять в JavaScript;
Не, ну понятно куда вставлять, но в чем фишка?
Я так понимаю, разница в обработке escape-символов?

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

это хабра, детка!
Это проверка только на IE или !IE.
а для тех кто в танке — на каком баге/хаке это основано?
Это не хак и не баг, это фича ;)
Добавил первоисточник. Там есть ответ на ваш вопрос.
просто все броузеры кроме IE считают "\v" спецсимволом вертикальной табуляции
наоборот =)
Извените, ошибся, невнимательный сегодня…
но этот вариант длинее будет :)
msdn.microsoft.com/en-us/library/abd85z98(VS.80).aspx
НЛО прилетело и опубликовало эту надпись здесь
== == ===
НЛО прилетело и опубликовало эту надпись здесь
Вы у меня спрашиваете не поняли ли Вы? ;)
НЛО прилетело и опубликовало эту надпись здесь
Посмотрел на вашу карму… Думаю многие вас не понимают. А это наверняка таблица раздела одного из ваших дисков.
он ошибся, наверно хотел сказать == === === :))
Не я не ошибался :) я так и хотел написать :)
«Не вы» не ошибались, а вы, стало быть, ошибались? Или нет?
Раз издеваетесь над другими, пишите сами грамотно.
Дело в том, что может быть в написанном примере и есть ошибка, но я не ошибся в том что я хотел написать. Я хотел как раз написать "== == ===" ;)
НЛО прилетело и опубликовало эту надпись здесь
|/_
0
_\
:===~
_ /

Простите за офтоп :)
Что это за пепяка7
Парсер скушал пробелы :(
До убиения парсером это была рожица с сигаретой. Типо штука юмора, еще раз извините.
Похоже на индейца который едет влево на котких лыжах, с толстыми лыжными палками.
Там кстати по ссылке целое соревнование на самый короткий способ… :) зря об этом не написали.
Видимо это связано со спец. символами.
\v — vertical tab
а это чем то хуже лучще условиев-комментариев?
НЛО прилетело и опубликовало эту надпись здесь
я наверно понял ошибку свою) этот метод использовать лучше в скрипте, а условия-комментарии в верстке
Хоть что-то полезное можно извлечь от наплевательского отношения к стандартам со стороны Microsoft :)
А вот в новых версиях МС пофиксит это и придётся всем скрипты переписывать =)
Ужасно будет, если этот хак расползётся по интернету.
Почему? В IE8 он работает. И дальше наверняка будет.
Хотя я сам считаю его некрасивым, встретив где-то в чужом коде, я, как наверно и многие, буду долго чесать репу, пытаясь понять что это такое.
Это баг, давно известный, признанный MS и даже попавший первым в Lakshman-овский «список отличий». В первых же рядах этот баг могут и прибить, никого не спросясь…
самый короткий способ определения должен иметь большой комментарий «как это оно так работает».
Имхо круто, и пофиксят не скоро =) Теперь ждемс пока jQuery или MooTools узнает у MS что к чему и начнет применять
Не страшно, интернет прекрасно живёт, проверяя браузеры по UA-строкам. Что ужаснее — вопрос. ;)
Когда-то давно одним из способов проверки на IE был if(document.all)
И всё работало до тех пока mozilla и safari не сделали поддерку all.
С любым хаком может произойти тоже самое.
Надеюсь все понимают что это было просто прикольное совевнование и никто не станет использовать хаки в реальных скриптах.
Нашли ещё более короткий способ определение IE:

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

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') уже не работает
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории