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

    IE='\v'=='v'

    Это решение является победителем в соревновании на выявление самого короткого способа определения IE.
    Ads
    AdBlock has stolen the banner, but banners are not teeth — they will be back

    More

    Comments 61

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

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

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

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

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

                                                        if(!+"\v1") // true only in IE
                                                          0
                                                          И в каком месте он короче? !+"\v1"(7 знаков) \v==v(5 знаков)
                                                            0
                                                            "\v"==«v» — 9 знаков
                                                          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» };
                                                          }
                                                            0
                                                            На всякий случай, в IE11 этот способ (IE='\v'=='v') уже не работает

                                                            Only users with full accounts can post comments. Log in, please.