ТаблицейБлоками.

Приложение Д: JavaScript SSI PHP версия браузера, USER_AGENT

Последняя модификация: 10.08.2014 г

Страница загружена с адреса: http://webdesign.site3k.ru/conjuncture/append/d/browse.html

Моя студия веб-дизайна

Точное определение имени и версии браузера.

  1. Определение имени и версии браузера с помощью JavaScript
  2. Определение имени и версии браузера для браузеров без JavaScript и поисковых машин

Определение имени и версии браузера с помощью JavaScript

Все встречавшиеся мне рекомендации по определению версии браузера посетителя оказываются несостоятельными, поскольку не учитывают стремление некоторых браузеров выдавать себя за то, чем не являются. Например, широко распространенный браузер Опера, может выдавать себя либо за Интернет Експлорер, либо за Mozilla. Поэтому простое сравнение типа if (navigator.appName == "Netscape") не дает истинного ответа. Кроме того, поисковая машина:

Поэтому поиск строки MSIE или Mozilla в CGI, PHP и SSI директивах так же легко вводит в заблуждение.

Предлагаю более корректный способ определения имени и версии браузера:

<SCRIPT LANGUAGE="JavaScript"><!--
uaVers='' // uaVers может не определиться в Опере, так что, переменную приходится инициализировать, чтобы не было ошибок
if (window.navigator.userAgent.indexOf ("Opera") >= 0)
  {
   ua = 'Opera';
   uaVers=window.navigator.userAgent.substr(window.navigator.userAgent.indexOf("Opera")+6,4);
  }
else
if (window.navigator.userAgent.indexOf ("Gecko") >= 0) // (Mozilla, Netscape, FireFox)
  {        // Их врядли стоит разделять, так как их разделение – только попытка вдохнуть новую жизнь в одного и того же вымирающего динозавра
   ua = 'Netscape';
   uaVers=window.navigator.userAgent.substr(window.navigator.userAgent.indexOf("Gecko")+6,8)+ ' ('+ window.navigator.userAgent.substr(8,3) + ')';
  }
else
if (window.navigator.userAgent.indexOf ("MSIE") >= 0)
  {
   ua = 'Explorer';
   uaVers=window.navigator.userAgent.substr(window.navigator.userAgent.indexOf("MSIE")+5,3);
  }
else
   ua = window.navigator.appName; // Неизвестные мне браузеры
//--></SCRIPT> 

В результате, становится возможным точное определение имени и версии.

При необходимости, код можно подкорректировать. Например, Mozilla, Netscape и FireFox, наверняка можно отделить друг от друга (у меня сейчас из них только мазила и я не могу посмотреть, в чем их различие для JavaScript). Можно не определять для Gecko-производных браузеров версию Gecko, а брать только версию браузера (window.navigator.userAgent.substr(8,3)), можно превратить номер версии в число (uaVers=parseFloat(uaVers);), чтобы затем проверить соответствие версий минимальному требованию. Можно еще много чего.

Главное, на что я хотел обратить внимание, так это на то, что Опера может маскироваться бод другой браузер, а это может стать источником проблем.

В отличие от Gecko-производных браузеров, она работает именно так, как задано стандартами WWW (Gecko-производные браузеры странно ведут себя с некоторыми элементами HTML и вообще не признают части CSS-атрибутов). Если скрипт примет Оперу за Нетскейп и будет пытаться адаптировать страницу, которая и без того прекрасно отображалась, страница может исказиться.

С другой стороны, Опера несколько отстает от Эксплорера в интерпретации скриптов и, например, моя версия, не понимает window.showModalDialog и window.showModelessDialog, что может привести к проблемам при маскировке под Експлорер. Поэтому, иногда бывает важным определить не только совместимость с MSIE и версию Мазилы, с которой совместим тот или иной продукт, а определить собственное название данного продукта и его собственную версию.

Вот перечень всех свойств навигатора:

 

А вот результат работы предлагаемого мной скрипта:

Поэкспериментировав на разных браузерах, вы увидите, что скрипт дает более точную и удобочитаемую информацию, чем window.navigator.appCodeName, window.navigator.appName, window.navigator.appVersion и window.navigator.userAgent.

Определение имени и версии браузера для браузеров без JavaScript и поисковых машин

Определение браузера с помощью JavaScript бессильно, если браузер не поддерживает JavaScript или в поддерживающем его браузере отключено использование JavaScript. А такое явление может быть достаточно распространенным, так как в Internet Explorer на платформе Windows XP с ServisPack 2 все динамическое содержимое по умолчанию блокируется и неопытный пользователь не рискнет отключать блокировку. Что же касается поисковиков, то они вообще не обрабатывают скрипты. Для таких случаев, название и версию браузера требуется определять еще на сервере.

Определение имени и версии браузера используя SSI это можно сделать таким способом:

<!--#if expr="$HTTP_USER_AGENT=/Opera/" -->
<!--#set var="ua" value="Opera" -->
<!--#elif expr="$HTTP_USER_AGENT=/Gecko/" -->
<!--#set var="ua" value="Netscape" -->
<!--#elif expr="$HTTP_USER_AGENT=/Windows/" -->
<!--#set var="ua" value="Explorer" -->
<!--#else -->
<!--#set var="ua" value="$HTTP_USER_AGENT" -->
<!--#endif -->

Здесь так же используется поиск части строки (с учетом синтаксиса SSI). Искать подстроку «Windows», следует в последнюю очередь, так как другие браузеры тоже могут работать из Windows (но не поисковые машины).

Для вашего браузера, результат получается такой: Netscape

При этом опрелелить версию невозможно из-за ограниченности функций SSI. Файл с определением браузера с помощью SSI должен иметь расширение из числа обрабатываемых SSI-парсером.

Определение имени и версии браузера используя PHP это можно сделать таким способом:

<?php
if (strpos($HTTP_USER_AGENT,"Opera") !==false)
   {
     $ua="Opera";
     $uaVers = substr($HTTP_USER_AGENT,strpos($HTTP_USER_AGENT,"Opera")+6,4);
   }
elseif (strpos($HTTP_USER_AGENT,"Gecko") !==false)
   {
     $ua="Netscape";
     $uaVers = substr($HTTP_USER_AGENT,strpos($HTTP_USER_AGENT,"Mozilla")+8,3);
   }
elseif (strpos($HTTP_USER_AGENT,"Windows") !==false)
   {
     $ua="Explorer";
     $uaVers = substr($HTTP_USER_AGENT,strpos($HTTP_USER_AGENT,"MSIE")+5,3);
   }
else
   {
     $ua=$HTTP_USER_AGENT;
     $uaVers=""; 
   }
?>

Для вашего браузера, результат получается такой:

Файл с определением браузера с помощью PHP должен иметь расширение из числа обрабатываемых PHP-парсером или из числа обрабатываемых SSI-парсером и включать PHP-скрипт SSI-директивой <!--#include virtual="agent.php" -->

Для браузеров с отключенным JavaScript может оказаться полезным включение в страницу таких строк:

<SCRIPT LANGUAGE="JavaScript"><!--
document.write('<' + '!--');
//-->
</SCRIPT>
<p style="color:red">Если вы хотите, чтобы сайт выглядел нормально, включите JavaScript!
Для броузера Internet Explorer и Windows XP с сервис-паком 2, щелкните по панели безопасности правой кнопкой мыши, и в ее контекстном меню выберите пункт "Разрешить заблокированное содержимое..."
<SCRIPT LANGUAGE="JavaScript"><!--
document.write('--' + '>');
//-->
</SCRIPT>

Если скрипт не поддерживается, в тексте отобразится предупредительная строка. Если поддерживается, запущенные перед и после предупредительной строки скрипты ее закоментируют.

 

Комментарии к странице (всего 6)

 

 

 


На главную страницу сайта