Сайт вебмастера

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

24-04-2007Время чтения ~ 1 мин.PHP 51455

Меня уже спрашивали, как сделать, чтобы на сайте отображался баннер «Загрузи нормальный браузер» только для пользователей 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 Ильдар Абдулин 2007-04-25 07:08:18

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

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

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

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

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


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

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

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


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

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


4 Ильдар Абдулин 2007-04-25 13:49:37
Максим:

25 апреля 2007 в 07:22

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

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


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

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


6 s3m 2007-04-25 15:47:29

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


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

2Максим:

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

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

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

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

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


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

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


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

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

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

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

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

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

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

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


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

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


12 Vsn 2007-04-26 19:47:23

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


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

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

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

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


14 Турист 2007-04-28 16:26:03

будущее за фф


15 Vedmak 2007-04-28 23:10:47

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


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

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

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

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


17 simpson 2007-05-01 01:23:52
Лучше бы написали плагин который определяет наличие Flash нужной версии и если флэш есть - выводится ролик, а если нет - картинка

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


18 Delchyve 2007-05-21 15:51:21

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

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

19 simpson 2007-05-21 21:03:15

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


20 Delchyve 2007-05-22 07:38:19

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


21 simpson 2007-05-22 10:34:05

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


22 Maximark 2007-06-21 09:50:47

Так определять браузер очень "просто"... 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 Cvetik 2007-10-15 08:53:56

Понятного мало


24 Ieronimus 2008-06-02 21:22:15

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


25 Alexpts 2009-01-02 13:58:08

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


26 Александр 2009-02-16 13:22:12

Спасибочки )


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

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


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

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

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