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

Рубрика: MaxSite CMS -> PHP
Среда, 25 апреля 2007 г.
Просмотров: 4813
Подписаться на комментарии по RSS
]]>
]]>

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

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

  1.  function maxsite_testIE() {
  2.   $user_agent = $_SERVER['HTTP_USER_AGENT'];
  3.   $browserIE = false;
  4.   if ( stristr($user_agent, 'MSIE 7.0') ) $browserIE = true; // IE7
  5.   if ( stristr($user_agent, 'MSIE 6.0') ) $browserIE = true; // IE6
  6.   if ( stristr($user_agent, 'MSIE 5.0') ) $browserIE = true; // IE5
  7.   return $browserIE;
  8.  }

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

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

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

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

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

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

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

]]>twitter.com Google Buzz google.com bobrdobr.ru del.icio.us technorati.com linkstore.ru news2.ru rumarkz.ru memori.ru moemesto.ru]]>

Комментариев: 26

Вы можете получать новые комментарии к этой записи по RSS или оформить подписку на все комментарии сайта. Или даже на все новые записи сайта. Не знаете, как это сделать?
  1. 2007-04-25 в 09:08:18 | Ильдар Абдулин

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  6. 2007-04-25 в 17:47:29 | s3m

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

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

    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 | Ильдар Абдулин

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  12. 2007-04-26 в 21:47:23 | Vsn

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

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

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

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

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

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

    будущее за фф

  15. 2007-04-29 в 01:10:47 | Vedmak

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

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

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

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

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

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

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

  18. 2007-05-21 в 17:51:21 | Delchyve

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

    if ( stristr($user_agent, 'MSIE 7.0') ) $browserIE = true;
  19. 2007-05-21 в 23:03:15 | simpson

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

  20. 2007-05-22 в 09:38:19 | Delchyve

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

  21. 2007-05-22 в 12:34:05 | simpson

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

  22. 2007-06-21 в 11:50:47 | Maximark

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

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

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

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

  25. 2009-01-02 в 15:58:08 | Alexpts

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

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

    Спасибочки )

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

Не регистрировать/аноним

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

Если вы уже зарегистрированы как комментатор или хотите зарегистрироваться, укажите пароль и свой действующий email.
(При регистрации на указанный адрес придет письмо с кодом активации и ссылкой на ваш персональный аккаунт, где вы сможете изменить свои данные, включая адрес сайта, ник, описание, контакты и т.д.)



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

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