Книга: JavaScript. Подробное руководство, 6-е издание

14.4.1. Объект Navigator

14.4.1. Объект Navigator

Свойство navigator объекта Window ссылается на объект Navigator, содержащий общую информацию о номере версии и о производителе броузера. Объект Navigator назван «в честь» броузера Netscape Navigator, но он также поддерживается во всех других броузерах. (Кроме того, IE поддерживает свойство clientlnformation как нейтральный синоним для navigator. К сожалению, другие броузеры свойство с таким именем не поддерживают.)

В прошлом объект Navigator обычно использовался сценариями для определений типа броузера - Internet Explorer или Netscape. Однако такой подход к определению типа броузера сопряжен с определенными проблемами, т. к. требует постоянного обновления с появлением новых броузеров или новых версий существующих броузеров. Ныне более предпочтительным считается метод на основе проверки функциональных возможностей (раздел 13.4.3). Вместо того чтобы делать какие-либо предположения о броузерах и их возможностях, гораздо проще прямо проверить наличие требуемой функциональной возможности (например, метода или свойства).

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

appName

Название веб-броузера. В IE это строка «Microsoft Internet Explorer». В Firefox значением этого свойства является строка «Netscape». Для совместимости с существующими реализациями определения типа броузера значением этого свойства в других броузерах часто является строка «Netscape».

appVersion

Обычно значение этого свойства начинается с номера версии, за которым следует другая информация о версии броузера и его производителе. Обычно в начале строки указывается номер 4.0 или 5.0, свидетельствующий о совместимости с четвертым или пятым поколением броузеров. Формат строки в свойстве appVersion не определяется стандартом, поэтому невозможно организовать разбор этой строки способом, не зависящим от типа броузера.

userAgent

Строка, которую броузер посылает в http-заголовке USER-AGENT. Это свойство обычно содержит ту же информацию, что содержится в свойстве appVersion, а также может включать дополнительные сведения. Как и в случае со свойством appVersion, формат представления этой информации не стандартизован. Поскольку это свойство содержит больше информации, именно оно обычно используется для определения типа броузера.

platform

Строка, идентифицирующая операционную систему (и, возможно, аппаратную платформу), в которой работает броузер.

Сложность свойств объекта Navigator делает невозможной универсальную реализацию определения типа броузера. На раннем этапе развития Всемирной паутины было написано немало программного кода, зависящего от типа броузера, проверяющего свойства, такие как navigator.appName. Создавая новые броузеры, производители обнаружили, что для корректного отображения содержимого существующих веб-сайтов они должны устанавливать значение «Netscape» в свойстве appName. По тем же причинам потерял свою значимость номер в начале значения свойства appVersion, и в настоящее время реализация определения типа броузера должна опираться на строку в свойстве navigator.userAgent, имеющую более сложный формат, чем ранее. Пример 14.3 демонстрирует, как с помощью регулярныx выражений (взятых из библиотеки jQuery) можно получить из свойства navigator.userAgent название броузера и номер версии.

Пример 14.3. Определение типа броузера с помощью свойства navigator.userAgent

// Определяет свойства browser.name и browser.version, позволяющие выяснить
// тип клиента. За основу взят программный код из библиотеки jQuery 1.4.1.
// Оба свойства, name и version, возвращают строки, и в обоих случаях
// значения могут отличаться от фактических названий броузеров и версий.
// Определяются следующие названия броузеров:
//
// "webkit": Safari или Chrome: version содержит номер сборки WebKit
// "opera": Opera; version содержит фактический номер версии броузера
// "mozilla": Firefox или другие броузеры, основанные на механизме gecko;
// version содержит номер версии Gecko
// "msie": IE; version содержит фактический номер версии броузера
//
// Например, для Firefox 3.6 возвращаются: {name: "mozilla", version: "1.9.2"}
var browser = (function() {
  var s = navigator.userAgent.toLowerCase();
  var match = /(webkit)[ /]([w.]+)/.exec(s) ||
      /(opera)(?:.*version)?[ /]([w.]+)/.exec(s) ||
      /(msie) ([w.]+)/.exec(s) ||
      !/compatible/.test(s) && /(mozilla)(?:.*? rv:([w.]+))?/.exec(s) ||
      [];
  return { name: match[1] || "", version: match[2] || "0" };
}());

В дополнение к свойствам с информацией о версии и производителе броузера, объект Navigator имеет еще несколько свойств и методов. В число стандартных и часто реализуемых нестандартных свойств входят:

onLine

Свойство navigator.onLine (если существует) определяет, подключен ли броузер к сети. Приложениям может потребоваться сохранять информацию о состоянии локально (с использованием приемов, описываемых в главе 20), если броузер не подключен к сети.

geolocation

Объект Geolocation, определяющий API для выяснения географического положения пользователя. Подробнее об этом рассказывается в разделе 22.1.

javaEnabled()

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

cookiesEnabled()

Нестандартный метод, который должен возвращать true, если броузер способен сохранять cookies. Если броузер настроен на сохранение cookies только для определенных сайтов, этот метод может возвращать некорректное значение.

Оглавление книги

Оглавление статьи/книги

Генерация: 0.699. Запросов К БД/Cache: 2 / 0
поделиться
Вверх Вниз