Добавляем...


Распознавание браузера: введение
Следующий простой сценарий демонстрирует основные варианты использования свойств объекта Navigator для распознавания браузера. Здесь просто отображается строка агента пользователя, а также название и номер версии браузера.


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtmll/DTD/xhtmll-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Pаспознавание браузера</title>
<meta http-equiv="content-type"
content="text/html; charset=windows-1251" />
</head>
<body>
<script type="text/javascript">
<! —
var browserName = navigator.appName;
var browserVersion = parseFloat(navigator.appVersion);
var userAgent = navigator.userAgent;
document.write("Строка агента пользователя = "+userAgent + "<br />");
document.write("Название браузера = "+ browserName+"<br />");
document.write("Версия браузера = "+browserVersion+"<br />");
// —>
</script>
<noscript>


Извините, не могу распознать браузер без поддержки JavaScript.


</noscript>
</body>
</html>

В некоторых браузерах (например, в Opera) значения browserVersion и даже browserName могут сообщать неверную информацию, несмотря на тот факт, что значение userAgent оказывается другим. Здесь мы видим демонстрацию того, что не следует полагаться ни на что, кроме строки агента пользователя. Браузеры преднамеренно пытаются быть похожими на объект, которому не будет отказано в доступе.

Поэтому следует провести глубокий анализ значения navigator .userAgent, чтобы выяснить, с чем именно вы имеете дело. Вот немного улучшенная версия предыдущего примера, способная с большей вероятностью распознать браузер, который обращается к узлу.


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtmll/DTD/xhtmll-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Pаспознавание браузера: вторая попытка</title>
<meta http-equiv="content^type"
content="text/html; charset=windows-1251" />
</head>
<body>
<script type="text/javascript">
<!--
var userAgent = navigator.userAgent;
var opera - (userAgent.indexOf('Opera1) != -1) ;
var ie ¦ (userAgent.indexOf('MSIE') != -1);
var gecko = (userAgent.indexOf('Gecko') != -1);
var oldnetscape = (userAgent.indexOf('Mozilla') != -1);
if (opera)
document.write("Браузер на базе Opera");
else if (gecko)
document.write("Браузер на базе Mozilla");
else if (ie)
document.write("Браузер на базе IE");
else if (oldnetscape)
document.write("Старый браузер на базе Netscape");
else
document.write("Неизвестный браузер");
// —>
</script>
<noscript>

Извините, не могу распознать браузер без поддержки JavaScript.


</noscript>
</body>
</html>

С помощью подобного сценария можно создать варианты разметки для отображения в окне конкретного браузера, пытающегося получить доступ к странице.
Например, следующий программный код отображает тот вариант разметки страницы, который подходит для используемого браузера:


if (ie && lopera)
document.write("<marquee>Специальный эффект для IE.</marquee>");
else if (oldnetscape)
document.write("<blink>Специальный эффект для Netscape.</blink>");
else
document.write("<b>Неизвестный браузер: просто полужирный шрифт.</b>");

При использовании такого подхода для распознавания браузера можно столкнуться с рядом проблем. Во-первых, здесь делается предположение, что браузер сообщает о себе корректную информацию.

Но на самом деле вы можете обнаружить, что многие малоизвестные браузеры идентифицируют себя, как Internet Explorer или Netscape, просто потому, что стремятся обеспечить себе разрешение на просмотр содержимого узлов, которые настроены только на распознавание основных моделей браузеров.

Можно, конечно, углубиться в анализ заголовка userAgent, но и это значение может оказаться сфальсифицированным.

Во-вторых, приходится постоянно проверять браузеры, чтобы использовать подходящие варианты разметки, а в результате страница "засоряется" программным кодом лишних сценариев. Немного позже вы увидите, как можно перенаправить пользователей или использовать другие подходы для решения указанной проблемы.

Но самой большой остается возникающая здесь третья проблема: предположение о том, что знания типа и версии браузера будет достаточно для правильного выбора подходящего действия.

Разработчик не должен опираться исключительно на тип и версию браузера, чтобы делать выводы о функциональных возможностях браузера, вместо этого следует сосредоточиться на распознавании самих возможностей.


добавить комментарий
(без перезагрузки и регистрации)


10 случайных разделов

Что ищем на сайте ?


Примеры кода на сайте







@ 2008-2011 Amber
При использовании материалов ссылка на сайт обязательна
Яндекс.Метрика