Определение браузера Internet Explorer

25 апреля 2007 г. Просмотров: 14797 RSS 28
Дневник » PHP

Меня уже спрашивали, как сделать, чтобы на сайте отображался баннер «Загрузи нормальный браузер» только для пользователей Internet Explorer.

На самом деле все очень просто. Для этого я написал функцию maxsite_testIE().

function maxsite_testIE() {
    $user_agent = $_SERVER['HTTP_USER_AGENT'];
    $browserIE = false;
    if ( stristr($user_agent, 'MSIE 7.0') ) $browserIE = true; // IE7
    if ( stristr($user_agent, 'MSIE 6.0') ) $browserIE = true; // IE6
    if ( stristr($user_agent, 'MSIE 5.0') ) $browserIE = true; // IE5
    return $browserIE;
}

Эту функцию нужно прописать в любом месте, например в index.php.

После этого, в том месте, где вы хотите показать текст с призывом пользоваться FireFox (или Opera), пишем:

<?php
if ( maxsite_testIE() ) {
  echo '<a href="http://www.mozilla-europe.org/ru/products/firefox/">
  Не ущемляй себя!<br />
  Установи нормальный браузер!</a>';
}
?>

Текст и оформление делайте уже по своему вкусу.

Для экстремалов могу предложить вместо вывода текста, сделать редирект на сайт FireFox. ;) Я правда не уверен, что ваши посетители это оценят, зато фанаты FireFox будут в восторге:

<?php
if ( maxsite_testIE() ) {
  header("Location: http://www.mozilla-europe.org/ru/products/firefox/");
  exit;
}
?>

Гулять, так гулять! smile


twitter.com facebook.com vkontakte.ru odnoklassniki.ru mail.ru friendfeed.com google.com yandex.ru
Комментариев: 28
  1. 2007-04-25 в 09:08:18 | Ильдар Абдулин#1

    А зачем извращаться?

    Тем более ваша функция показывает баннер тем, у кого в браузерах стоит идентификация "а-ля ИЕ" (например, в старых версиях Оперы эта опция даже стояла по умолчанию)

    Conditional comments прекрасно справляются с задачей

    Это отобразится только в ослике ИА

    (лишние пробелы удалить)

  2. 2007-04-25 в 09:10:19 | Ильдар Абдулин#2

    блин, все равно порезался код...

    можно погуглить, инфы про Conditional comments выше крыши

  3. 2007-04-25 в 09:22:58 | Максим#3

    Приведите-ка пример редиректа с помощью Conditional comments? ;)

  4. 2007-04-25 в 15:49:37 | Ильдар Абдулин#4
    Максим:
    25 апреля 2007 в 07:22
    Приведите-ка пример редиректа с помощью Conditional comments?

    в данном случае вопрос стоял не о редиректе, а о показе баннера для пользователей ИЕ

  5. 2007-04-25 в 16:56:45 | Максим#5

    Ну тогда приведите пример кода (хака), который покажет пользователям IE вышеприведенный текст со ссылкой на сайт FireFox. ;)

  6. помню был такой плагин, который не пускал на блог пользователей IE )) жосткий плагин, но между прочим идеи для него у меня были ))

  7. 2007-04-25 в 19:17:08 | Ильдар Абдулин#7

    2Максим:

    читайте http://www.quirksmode.org/css/condcom.html

    <!--[if IE]>
    According to the conditional comment this is Internet Explorer<br />
    <![endif]-->
  8. 2007-04-25 в 19:21:31 | Ильдар Абдулин#8

    код в комментах все равно режется

    идите по ссылке в предыдушем сообщении - там прекрасно разжевано и с примерами

  9. 2007-04-25 в 20:00:07 | Максим#9

    Должны наверное знать, что для публикации html-кода нужно его преобразовывать в спецсимволы. Теперь по сути. Сию конструкцию понимает только IE, для других же браузеров это довольно жестокое издевательство над DOM. Кроме этого, в IE полно всяческих глюков, которые тоже можно считать "идентификацией" IE :razz:

  10. 2007-04-26 в 09:33:09 | Ильдар Абдулин#10

    комментарии - не издевательство над dom

    а именно как комментарии и воспринимают другие браузеры conditional comments

    и только IE их и понимает, что собственно и было нужно

    отличие СС от прочих css-хаков в том, что они поддерживаются и, скорее всего, будут поддерживаться всеми версиями ie и как раз-таки не причиняют ни малейшего вреда при использовании в других браузерах

    короче, Максим, вы не в теме

    обсуждение закрыто

    о преобразовании в спецсимволы - не знал, теперь буду

  11. 2007-04-26 в 11:01:28 | Максим#11

    Да, действительно, проверил: FireFox и Opera воспринимают этот код как комментарий. Может быть для небольших вставок он и годится. Для более серьезного кода я бы его не использовал, поскольку он всегда присутствует в html-странице, даже если и не отображается в нормальных браузерах. Мой способ куда более избирателен, поскольку добавляет код в страницу только для пользователей IE. Для пользователей других браузеров он вообще не генерируется и страница не содержит мусора специально для IE.

  12. А про IE7 забыли smile Кстати, вот тут подумал, а может ли быть такое, что MSIE 6.0 будет не ровно, а скажем MSIE 6.5, такое вообще бывает? И еще хотелось, чтобы код работал не только для ИЕ, но и для оперы тож, так то оперу тож втопку, надо юзать файрфокс!

  13. 2007-04-26 в 23:02:16 | Максим#13

    Насчет дробной версии я не могу ничего сказать. Наверное тогда можно вместо 'MSIE 6.0' указать просто 'MSIE'.

    Таким же образом делается определение для Оперы 'Opera' и FireFox'а - 'Firefox'. Любители IE, кстати, могут переправлять пользователей неIE, например на сайт M$ :smile:

    ps Практическое применение определения браузера (для переключения css-стилей) см. в 9-м выпуске рассылки.

  14. 2007-04-28 в 18:26:03 | Турист#14

    будущее за фф

  15. Зачем изобретать велосипед, когда Conditional Comments работает годы и это официальный способ от Microsoft для опознания любой весрии Internet Explorer, начиная с 5.0. К тому же СС можно применять на любом типе страниц, а не только php.

  16. 2007-04-30 в 21:58:51 | Кошка#16

    Не понимаю такого фанатизма, я вот тоже пользуюсь FireFox, но он не панацея - когда, например нужно с вэбманями поработать через браузер - ничего кроме IE не получится использовать (можно полуторный FF, но после "издевательства" над ним при помощи плагина).

    К тому же, мальчики, зачем навязывать свое мнение? Я вот пишу это сообщение с SONY VAIO PCG-4H2P, но я же не гноблю пользующих Rover'ы - личное дело каждого, что использовать.

    Лучше бы написали плагин который определяет наличие Flash нужной версии и если флэш есть - выводится ролик, а если нет - картинка (скажем для шапки блога).:wink:

  17. Лучше бы написали плагин который определяет наличие Flash нужной версии и если флэш есть - выводится ролик, а если нет - картинка

    такое решение, оформленное в Javascript, существует уже довольно давно. SWFObject называется.

  18. Максим, уже ИЕ 7-ой появился. Так что, думаю, будет уместно добавиь еще строчку smile

    if ( stristr($user_agent, 'MSIE 7.0') ) $browserIE = true;
  19. может, лучше, наоборот, сократить искомую подстроку до "msie"? smile

  20. А с этого места можно поподробнее?

  21. if ( stristr($user_agent, 'msie') ) $browserIE = true;

  22. Так определять браузер очень "просто"... OPERA может представиться как MSIE... поэтому надо чуть усложнить проверку

    например чтобы убрать баг мерцания MSIE 6 document.execCommand("BackgroundImageCache", false, true);

    в опере js потом будет работать некорректно... мягко сказать, поэтому вот код более точного определения:

    function GetUserAgent($ua = null)
        {
            /**
            * Default to the user agent that the browser sends
            */
            if (is_null($ua)) {
                $ua = $_SERVER['HTTP_USER_AGENT'];
            }
            $b = array();
            /**
            * Major and minor version numbers
            */
            $b['is_major'] = intval(substr($ua, strpos($ua, 'Mozilla/') + 8));
            $b['is_minor'] = substr($ua, strpos($ua, 'Mozilla/') + 8);
            $b['is_minor'] = (int)substr($b['is_minor'], strpos($b['is_minor'], '.') + 1);;
            /**
            * Type of browser
            */
            $b['is_ff']    = strpos($ua, 'Firefox') !== false;
            $b['is_ie']    = (strpos($ua, 'MSIE')     !== false && strpos($ua, 'Opera') === false);
            $b['is_opera'] = strpos($ua, 'Opera')     !== false;
            $b['is_nn']    = (strpos($ua, 'Mozilla')  !== false &&
                              strpos(strtolower($ua), 'spoofer')  === false &&
                              strpos(strtolower($ua), 'webtv')   === false &&
                              strpos(strtolower($ua), 'hotjava') === false &&
                              $b['is_opera'] === false &&
                              $b['is_ie']    === false) &&
                              $b['is_ff']    === false;
            $b['is_konq']  = strpos($ua, 'Konqueror') !== false;
            /**
            * Operating system
            */
            $b['is_win'] = strpos($ua, 'Win') !== false;
            $b['is_mac'] = strpos($ua, 'Mac') !== false;
            $b['is_nix'] = strpos($ua, 'X11') !== false;
            /**
            * Internet Ekplorer
            */
            if ($b['is_ie'] AND !$b['is_opera']) {
                $b['is_ie4']   = strpos($ua, 'MSIE 4.') !== false;
                $b['is_ie5']   = strpos($ua, 'MSIE 5.') !== false;
                $b['is_ie5_5'] = strpos($ua, 'MSIE 5.5') !== false;
                $b['is_ie6']   = strpos($ua, 'MSIE 6.') !== false;
                $b['is_ie7']   = strpos($ua, 'MSIE 7.') !== false;
            /**
            * Firefox
            */
            } elseif ($b['is_ff']) {
                $b['is_ff1'] = strpos($ua, 'Firefox/1') !== false;
                $b['is_ff2'] = strpos($ua, 'Firefox/2') !== false;
            /**
            * Netscape Navigator
            */
            } elseif ($b['is_nn']) {
                $b['is_nn2']   = $b['is_major'] === 2;
                $b['is_nn2up'] = $b['is_major'] >= 2;
                $b['is_nn3']   = $b['is_nn2up'] && $b['is_major'] === 3;
                $b['is_nn3up'] = $b['is_nn2up'] && $b['is_major'] >= 3;
                $b['is_nn4']   = $b['is_nn3up'] && $b['is_major'] === 4;
                $b['is_nn4up'] = $b['is_nn3up'] && $b['is_major'] >= 4;
                $b['is_nn6']   = $b['is_nn4up'] && $b['is_major'] === 5;
                $b['is_nn6up'] = $b['is_nn4up'] && $b['is_major'] >= 5;
                $b['is_nn8']   = $b['is_nn6up'] && (bool)strpos($ua, 'Netscape/8');
            /**
            * Opera
            */
            } elseif ($b['is_opera']) {
                $b['is_opera5'] = strpos($ua, 'Opera/5') !== false;
                $b['is_opera6'] = strpos($ua, 'Opera/6') !== false;
                $b['is_opera7'] = strpos($ua, 'Opera/7') !== false;
                $b['is_opera8'] = strpos($ua, 'Opera/8') !== false;
                $b['is_opera9'] = strpos($ua, 'Opera/9') !== false;
            /**
            * Other. Some of the more common robots etc...
            */
            } else {
                $b['is_google']    = strpos($ua, 'Mediapartners-Google') !== false;
                $b['is_googletb']  = strpos($ua, 'GoogleToolbar') !== false;
                $b['is_ffg']       = strpos($ua, 'Feedfetcher-Google') !== false;
                $b['is_googlebot'] = strpos($ua, 'Googlebot') !== false;
                $b['is_newsgator'] = strpos($ua, 'NewsGatorOnline/') !== false;
                $b['is_magpierss'] = strpos($ua, 'MagpieRSS') !== false;
                $b['is_planetphp'] = strpos($ua, 'PlanetPHPAggregator') !== false;
                $b['is_bloglines'] = strpos($ua, 'Bloglines') !== false;
                $b['is_doubanbot'] = strpos($ua, 'Doubanbot') !== false;
                $b['is_topix']     = strpos($ua, 'Topix.net') !== false;
                $b['is_rssreader'] = strpos($ua, 'RssReader') !== false;
                $b['is_nnw']       = strpos($ua, 'NetNewsWire') !== false;
                $b['is_ngo']       = strpos($ua, 'NewsGatorOnline') !== false;
                $b['is_gn']        = strpos($ua, 'GreatNews') !== false;
                $b['is_rb']        = strpos($ua, 'RssBar') !== false;
            }
            /**
            * Which version of windows?
            */
            if ($b['is_win']) {
                $b['is_98']      = strpos($ua, 'Windows 98')     !== false;
                $b['is_nt']      = strpos($ua, 'Windows NT 4.0') !== false;
                $b['is_2000']    = strpos($ua, 'Windows NT 5.0') !== false;
                $b['is_xp']      = strpos($ua, 'Windows NT 5.1') !== false;
                $b['is_2003']    = strpos($ua, 'Windows NT 5.2') !== false;
                $b['is_vista']   = strpos($ua, 'Windows NT 6.0') !== false;
            /**
            * Macs
            */
            } elseif ($b['is_mac']) {
                $b['is_osx'] = strpos($ua, 'OS X') !== false;
            /**
            * *Nix
            */
            } elseif ($b['is_nix']) {
                $b['is_fed']    = strpos($ua, 'Fedora/') !== false;
                $b['is_ubuntu'] = strpos($ua, 'Ubuntu') !== false;
            }
            return $b;
        }
  23. Понятного мало

  24. 2008-06-02 в 23:22:15 | Ieronimus#24

    Вроде бы сработало так: MSIE 5 (или 6, 7) просто первая цифра, которая должна быть определяющей для всех IE соответствующей версии.

  25. У Nox`а есть такй проект - http://nomsie.ru/

  26. 2009-02-16 в 15:22:12 | Александр#26

    Спасибочки )

  27. Сделал Ушку себе, чтоб в сайдбаре появлялось сообщение с просьбой скачать другой браузер. И ссылки на загрузку) спасибо Макс)

  28. 2011-09-16 в 15:58:49 | Приятный Собеседник#28

    Для определения IE6 я использую такой сопсоб:

    http://www.easy2code.com/ru/notes/view/opredelenie_ie6

Оставьте комментарий!

grin LOL cheese smile wink smirk rolleyes confused surprised big surprise tongue laugh tongue rolleye tongue wink raspberry blank stare long face ohh grrr gulp oh oh downer red face sick shut eye hmmm mad angry zipper kiss shock cool smile cool smirk cool grin cool hmm cool mad cool cheese vampire snake excaim question

Используйте нормальные имена

Имя и сайт используются только при регистрации

Зарегистрируйтесь, чтобы получать уведомления о новых комментариях по email.

Авторизация Войти через loginza

(обязательно)

РЕКЛАМА качественный перевод песен есть у нас Полезные заметки по Macintosh