Тема: Browser Detection
Показать сообщение отдельно
  #1 (permalink)  
Старый 10.10.2008, 18:19
Отправить личное сообщение для Octane Посмотреть профиль Найти все сообщения от Octane  
Регистрация: 10.07.2008
Сообщений: 3,873

Browser Detection
Давайте попробуем найти самый оптимальный способ определения браузеров :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.

Последний раз редактировалось Octane, 14.10.2008 в 19:35.
Ответить с цитированием