Объект navigator (см. 4.5.1) служит для получения характеристик Web-браузера клиента.
Поддерживаемые объектом navigator свойства отличаются в разных Web-браузерах. Ниже приведены те свойства (только для чтения), которые поддерживаются всеми Web-браузерами:
· userAgent – содержит строку, идентифицирующую Web-браузер клиента;
· appName – содержит имя программы Web-браузера;
· appVersion – содержит версию программы Web-браузера;
· appCodeName – содержит имя кода программы Web-браузера;
· platform – содержит название клиентской платформы;
· cookieEnabled – содержит true, если Web-браузеру разрешен пользователем прием cookie, иначе содержит false.
Объект navigator поддерживает, кроме того, метод javaEnabled(), возвращающий true, если Web-браузеру разрешено пользователем выполнение сценариев JavaScript и false – в противном случае.
Основными характеристиками Web-браузера являются его имя и версия.
Имя Web-браузера можно определить по наличию в свойстве userAgent следующих строк:
· "MSIE" – для Internet Explorer;
· "Firefox" – для Firefox;
· "Opera" – для Opera;
· "Safari" – для Safari.
Версию Web-браузера также определяется с помощью свойства userAgent. Номер версии следует сразу за строкой имени Web-браузера и отделен от нее символом пробела (в Internet Explorer) или символом "/" (в Firefox и Opera). В номер версии в Windows задается после строки "Version/".
Пример 4.5.35. Определение характеристик Web-браузера:
Имя Web-браузера можно получить с помощью следующей функции:
function browserNameDef()
{
// Массив имен Web-браузеров
browserNames = new Array("MSIE",
"Firefox", "Opera", "Safari");
// Имя Web-браузера по умолчанию
name = "unknown";
// Поиск имени Web-браузера в цикле
for(i = 0; i < browserNames.length;i++)
{
// Если Web-браузер найден
if(navigator.userAgent.indexOf(browserNames[i])!= -1)
{
// Присваивание имени Web-браузеру
if(browserNames[i] == "MSIE")
name = "Internet Explorer";
else
name = browserNames[i];
// Выход из цикла
break;
}
}
// Возврат имени Web-браузера
return name;
}
Версию Web-браузера для заданного имени можно получить с помощью следующей функции:
function browserVersionDef(browserName)
{
// Выбор параметров поиска версии
switch (browserName)
{
case "MSIE":
case "Internet Explorer":
browserName = "MSIE";
endSymbol = ";";
break;
case "Firefox":
endSymbol = "\n";
break;
case "Opera":
endSymbol = " ";
break;
case "Safari":
browserName = "Version";
endSymbol = " ";
break;
default:
return "unknown"
}
// Поиск имени Web-браузера в свойстве userAgent
browserNameIndex =
navigator.userAgent.indexOf(browserName);
// Если имя Web-браузера найдено
if(browserNameIndex!= -1)
{
// Если символ окончания версии не равен "\n"
if(endSymbol!= "\n")
{
// Определение индекса
// окончания версии
versionEndIndex =
navigator.userAgent.indexOf(endSymbol,
browserNameIndex);
// Определение версии Web-браузера
browserVersion =
navigator.userAgent.substring(
browserNameIndex +
browserName.length + 1, versionEndIndex);
}
else
// Определение версии Web-браузера
browserVersion =
navigator.userAgent.substring(
browserNameIndex +
browserName.length + 1);
// Возврат версии Web-браузера
return browserVersion;
}
// Возврат ошибки в поиске строки Web-браузера
return "error";
}
Для фрагмента сценария:
// Определение имени Web-браузера
browserName = browserNameDef();
// Определение версии Web-браузера
browserVersion = browserVersionDef(browserName);
// Вывод характеристик Web-браузера
alert("Характеристики Вашего Web-браузера:" +
"\n Имя: " + browserName +
"\n Версия: " + browserVersion +
"\n\n userAgent: " + navigator.userAgent +
"\n appName: " + navigator.appName +
"\n appVersion: " + navigator.appVersion +
"\n appCodeName: " + navigator.appCodeName +
"\n platform: " + navigator.platform +
"\n Подключение cookie: " +
(navigator.cookieEnabled?"да":"нет") +
"\n Подключение JavaScript: " +
(navigator.javaEnabled()?"да":"нет"));
в разных Web-браузерах будут выведены следующие сообщения:
(в Internet Explorer) |
(в Firefox) |
(в Opera) |
(в Safari) |
Свойства объекта navigator позволяют создавать сценарии, учитывающие используемый Web-браузер и его версию.
Пример 4.5.36. Учет особенностей Web-браузера в сценарии:
При исключении пункта меню в примере 4.5.30(7) из выбираемых пунктов, в Internet Explorer 8.0 и всех остальных Web-браузерах его можно перевести в неактивное состояние, установив значение свойства disabled в true. В Internet Explorer 7.0 и ниже свойство disabled не действует, поэтому пункт меню можно исключить, только удалив его из меню (см. пример 4.5.30(5)).
Следующий фрагмент сценария удаляет пункт меню "Черный" для Internet Explorer 7.0 и ниже, а в Internet Explorer 8.0 и остальных Web-браузерах переводит его в неактивное состояние (для определения имени и версии Web-браузера используются функции browserNameDef() и browserVersionDef(), определенные в примере 4.5.35):
// Задание модифицируемого цвета
modifiedColor = "Черный";
// Получение элемента для
// раскрывающегося меню выбора цвета
selectColorElement =
document.getElementById("colorMenuChoice1");
// Получение коллекции пунктов меню
selectOptions = selectColorElement.options;
// Модификация пункта меню в цикле
for(i = 0;i < selectColorElement.length;i++)
{
// Если пункт меню – модифицируемый пункт
if(selectOptions[i].text == modifiedColor)
{
// Сохранение индекса пункта меню
selectedIndex = i;
// Определение имени Web-браузера
browserName = browserNameDef();
// Определение версии Web-браузера
browserVersion = browserVersionDef(browserName);
// Если Web-браузер - Internet
// Explorer версии 7.0 и ниже
if(browserName == "Internet Explorer" &&
parseFloat(browserVersion) < 8.0)
// Удаление пункта меню
selectColorElement.remove(selectedIndex);
else
// Установка пункта меню
// в неактивное состояние
selectColorElement.options
[selectedIndex].disabled = true;
// Выход из цикла
break;
}
}
После выполнения этого фрагмента раскрывающееся меню будет иметь разный вид в разных версиях Internet Explorer:
(в Internet Explorer 7.0) | (в Internet Explorer 8.0) |