Путем разбора строки, возвращаемой из свойства
window.navigator.userAgent
, определяется большинство известных браузеров. Метод недостаточно надежен, так как некоторые браузеры (например, Opera) может выдавать себя за другой браузер. Тем не менее в большинстве случаев, при тщательном разборе строки, этой информации достаточно, чтобы идентифицировать браузер.
Другой способ (по сути это утиная проверка - en, ru) основан на проверке существования определенных методов и свойств, поддерживаемых ограниченным количеством браузеров. Этот способ достаточно уверенно определяет марку браузера, но с трудом справляется с версией. Но комбинируя оба способа, можно получить искомое.
Internet Explorer можно узнать по поддержке таких специфических для него объектов как document.all и window.ActiveXObject. Кроме того, следует помнить, что Internet Explorer реализует собственный диалект JavaScript - JScript. А это значит, что существуют дополнительные свойства и функции. В данном случае речь идет о функциях, которые возвращают сведения о текущей версии обработчика сценариев -
ScriptEngine
, ScriptEngineBuildVersion
, ScriptEngineMajorVersion
, ScriptEngineMinorVersion
. В зависимости от версии операционной системы, браузера, обработчика сценариев возвращаемая информация отличается.
ScriptEngineBuildVersion
в данном случае несет мало информации, так как сообщает о номере сборки. ScriptEngine
всегда вернет строку "Jscript"
, а ScriptEngineMajorVersion
- пока цифру 5. Хотя эти значения функций одинаковые, но само их наличие уже идентифицирует браузер. Оставшаяся функция - ScriptEngineMinorVersion
- вернет младший номера версии, который специфичен для каждого браузера и по удивительному совпадению равен старшей версии браузера:
Браузер | ScriptEngine() | ScriptEngineMajorVersion() | ScriptEngineMinorVersion() |
---|---|---|---|
Internet Explorer 6.0 | JScript | 5 | 6 |
Internet Explorer 7.0 | JScript | 5 | 7 |
Internet Explorer 8.0 | JScript | 5 | 8 |
Это получение версии JScript (jscript.dll), а не IE. Например, у меня на IE6 ScriptEngineMinorVersion()==7, т.к. установлен WSH5.7
ReplyDeleteОБ этом я и написал "возвращают сведения о текущей версии обработчика сценариев". Но Вы верно подметили, что версии могут не совпадать. Спасибо за замечание.
Delete