Показать сообщение отдельно
  #1 (permalink)  
Старый 21.01.2012, 17:22
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

Определение типа браузера и версии, по возможностям браузера/движка
вот решил сюда отписать решение по определению браузера на основе возможностей браузера или специальных методов свойственных конкретному браузеру/движку

для начала приведу пример как я пытаюсь выяснить тот или иной браузер, путем проверок наличия тех или иных методов:
hasIE = window.eval && eval("/*@cc_on 1;@*/");
hasOpera = !!window.opera;
hasChrome = !!window.chrome;
hasFireFox = !!window.sidebar;
hasSafari = !window.external && !hasOpera;

Как мы видим все логично и понятно. ИЕ имеет возможность компиляцию условных выражений внутри комментариев. Тем самым мы можем точно выяснить принадлежность движка ИЕ.

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

ФайрФокс и Сафари все немного иначе, файрфокс использует движок Gecko и именно в этом движке имеется объект window.sidebar. Который нужен для работы с боковой панелью браузера. Именно наличие этого объекта нам дает возможность выяснить о принадлежности движка Gecko.

Для сафари совсем все немного иначе, мы просто смотрим отсутствие объекта window.external и смотрим не опера ли это. Так как именно эти два браузера не имеют в наличии объекта window.external.

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

Что у меня вышло:
hasIE = window.eval && eval("/*@cc_on 1;@*/") && (/msie (\d+)/i.exec(navigator.userAgent) || [,true])[1];
hasOpera = !!window.opera && window.opera.version && window.opera.version();
hasChrome = !!window.chrome && (/chrome\/([\d\.]+)/i.exec(navigator.userAgent)[1] || true);
hasFireFox = !!window.sidebar && (/firefox\/([\d\.]+)/i.exec(navigator.userAgent)[1] || true);
hasSafari = !window.external && !hasOpera && (/safari\/([\d\.]+)/i.exec(navigator.userAgent)[1] || true);


Здесь все просто,

Опера имеет внутренний метод с помощью которого можно получить номер версии браузера.

Для всех остальных браузеров приходится версию получать из строки UserAgent и в случае неудачи мы будем иметь не строку версии а значение true в переменной если имеем дело с этим браузером.

В заключении хочу сказать, что каждая переменная имеет тип строка, с номером версии данного браузера. И нам достаточно просто выполнить подобное действие в коде что бы работать далее:
if (hasIE && parseInt(hasIE) == 7) {}
Хотя что вы будете делать со значением в переменой это решать вам. Я лишь привел один из примеров.

Это все что у меня пока пришло в голову, так же хотелось бы придумать возможность определения движков и тип браузера (мобильный, настольный и т.д.). Если есть идеи по этому вопросу, буду признателен выслушать их. Так же не против выслушать критику по методам описанным выше.

Всем спасибо!

Последний раз редактировалось devote, 11.10.2013 в 17:11.
Ответить с цитированием