Давайте попробуем найти самый оптимальный способ определения браузеров :cool:
Рассмотрев несколько примеров из известных фреймворков и основываясь на собственном опыте написал такой код:
var browser = function() {
var ua = navigator.userAgent, gecko = /Gecko\//.test(ua) ? ua.match(/; rv:1\.(\d+?)\.(\d)/) : 0,
webkit = /AppleWebKit/.test(ua), safari = webkit && /Safari\//.test(ua),
ie = 0 /*@cc_on + @_jscript_version * 10 % 10 @*/;
return {
ie: ie >= 5 ? ie : 0,
gecko: gecko ? '1.' + gecko.slice(1).join('.') : 0,
firefox: gecko ? (gecko[1] == 9 ? 3 : gecko[1] == 8 && gecko[2] > 0 ? 2 : 0) : 0,
opera: window.opera && opera.version ? opera.version()[0] : 0,
webkit: webkit ? ua.match(/AppleWebKit\/(\d+?\.\d+?\s)/)[1] : 0,
safari: safari && /Version\//.test(ua) ? ua.match(/Version\/(\d{1})/)[1] : 0,
chrome: safari && /Chrome\//.test(ua) ? ua.match(/Chrome\/(\d+?\.\d)/)[1] : 0
};
}();
Здесь при использовании IE5.01 и ниже атрибут browser.ie будет равен 0, потому что врятле уже кто-то будет писать код для IE5.01 без использования apply.
В результате выполнения этого кода в FF3.0.3 получается вот такой объект:
browser = {
ie:0,
gecko:"1.9.0",
firefox:3,
opera:0,
webkit:0,
safari:0,
chrome:0
};
Какие у Вас есть предложения по улучшению кода? Может быть кто-то знает более короткие или быстрые способы узнать, какой браузер используется? Какие браузеры стоит добавить в список, а какие убрать? И т.д. и т.п.
Так же будет интересно, если кто-то сможет протестировать код в разных версиях Safari.