MaxSite.org
Всё о создании веб-сайтов

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

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

Гулять, так гулять! :)

Комментариев: 28 RSS

1Ильдар Абдулин25-04-2007 09:08

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

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

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

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

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

2Ильдар Абдулин25-04-2007 09:10

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

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

3Максим25-04-2007 09:22

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

4Ильдар Абдулин25-04-2007 15:49

Максим:
25 апреля 2007 в 07:22
Приведите-ка пример редиректа с помощью Conditional comments?

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

5Максим25-04-2007 16:56

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

6s3m25-04-2007 17:47

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

7Ильдар Абдулин25-04-2007 19:17

2Максим:

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

<!--[if IE]> According to the conditional comment this is Internet Explorer<br /> <![endif]-->

8Ильдар Абдулин25-04-2007 19:21

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

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

9Максим25-04-2007 20:00

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

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

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

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

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

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

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

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

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

11Максим26-04-2007 11:01

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

12Vsn26-04-2007 21:47

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

13Максим26-04-2007 23:02

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

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

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

15Vedmak29-04-2007 01:10

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

16Кошка30-04-2007 21:58

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

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

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

17simpson01-05-2007 03:23

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

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

18Delchyve21-05-2007 17:51

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

if ( stristr($user_agent, 'MSIE 7.0') ) $browserIE = true;

19simpson21-05-2007 23:03

может, лучше, наоборот, сократить искомую подстроку до "msie"? :)

20Delchyve22-05-2007 09:38

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

22Maximark21-06-2007 11:50

Так определять браузер очень "просто"... 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;
    }

24Ieronimus02-06-2008 23:22

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

25Alexpts02-01-2009 15:58

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

27Дмитрий14-08-2011 21:05

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

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

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

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

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

Комментарий будет опубликован после проверки. Вы соглашаетесь с правилами сайта.

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