Определение типа браузера и версии, по возможностям браузера/движка
вот решил сюда отписать решение по определению браузера на основе возможностей браузера или специальных методов свойственных конкретному браузеру/движку
для начала приведу пример как я пытаюсь выяснить тот или иной браузер, путем проверок наличия тех или иных методов: 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) {}Хотя что вы будете делать со значением в переменой это решать вам. Я лишь привел один из примеров. Это все что у меня пока пришло в голову, так же хотелось бы придумать возможность определения движков и тип браузера (мобильный, настольный и т.д.). Если есть идеи по этому вопросу, буду признателен выслушать их. Так же не против выслушать критику по методам описанным выше. Всем спасибо! |
IE < 9. моя любимая проверка. это к слову.
ielt9 = '\v'=='v'; |
Цитата:
|
Цитата:
Стараюсь писать код совместимый с браузерами, всеми кроме IE, всегда получалось, кроме Оперы один раз. IE проверяю, когда что-то нужно чтобы работало, а оно не работает в IE. Под него проще писать свой код или не писать ;) ps: без либ уже не пишу, а там есть и проверка и версии. |
Цитата:
|
Цитата:
|
Цитата:
|
А почему это баг? Просто вертикальная табуляция не поддерживается, поэтому
v не преобразуется в спец символ. Для других символов тоже верно:alert("\o" == "o") //true во всех браузерах |
Цитата:
Но все же никто по теме посоветовать ничего не может? |
Цитата:
Если хочется найти более корректное или оптимальное решение, то следует посмотреть исходники популярных либ. |
Часовой пояс GMT +3, время: 23:20. |