Navigator. как лучше пользоваться?
Посоветуйте как лучше отфильтровать браузеры?
На какое свойство navigator ориентироваться при определении браузера? Из наблюдений могу сказать: navagator.appName == "Opera" // true для opera navagator.appName == "Microsoft Internet Explorer" // true для ms navigatot.vendor == "Apple Computer, Inc." // true для safari navigator.vendor == "Google Inc." // true для chrome navigator.oscpu // такое свойство есть только у firefox Тестил в свежих браузерах. Как вы ориентируетесь в браузерах? Посоветуйте способы определения (желательно без regEx) браузера не зависимо от версии. Может есть какой-то готовый небольшой(!) плагинчик? |
Вот плагин который поможет узнать название браузера:
<!DOCTYPE HTML>
<html>
<head>
<script>
function go() {
if (navigator.appName == "Opera") {
alert("opera");
}
if (navigator.appName == "Microsoft Internet Explorer") {
alert("ms");
}
if (navigator.vendor == "Apple Computer, Inc.") {
alert("safari");
}
if (navigator.vendor == "Google Inc.") {
alert("chrome");
}
if (navigator.oscpu) {
alert("firefox");
}
}
</script>
</head>
<body>
<button onclick="go();">узнать браузер</button>
</body>
</html>
Плагин успешно работает в: -ie 7,8,9 -safari 6.0 -opera 12.02 -firefox 15.0.1 -chrome 21.0.1180.89 |
еси у кого есть возможность посмотреть как он работает в старых версиях браузеров, буду рад если отпишитесь.
.. ну или предложите свой метод определения браузера ) |
Быстренько набросал давно уже:
var Browser = {};
if (/(Trident|Gecko|WebKit|KHTML|Presto)\W*([.,\w]+)*/i.test(navigator.userAgent)) {
Browser.layoutEngineName = RegExp.$1.toLowerCase();
Browser.layoutEngineVersion = RegExp.$2;
}
if (window.opera) {
Browser.name = 'opera';
Browser.version = opera.version();
} else if (/(MSIE|Firefox|Chrome|Safari|Konqueror)\W*([.,\w]+)*/i.test(navigator.userAgent)) {
Browser.name = RegExp.$1.toLowerCase();
Browser.version = RegExp.$2;
}
|
Riim,
мощно, зачот! :thanks: |
navigator.userAgent.indexOf('ключевое слово')
PS: в принципе не стоит разграничивать код по браузерам |
bes,
сенкс, что-то даже не подумал, что можно выцепить с помощью indexOf. В дебри полез :) Цитата:
|
Цитата:
|
Цитата:
|
да, сафари и хром повторяются. Ну они и работают более или менее идентично.
|
Цитата:
|
Цитата:
|
Цитата:
|
Цитата:
|
Цитата:
|
Цитата:
А насчет багов, эти проблемы как правило всегда можно решить без определения браузеров и цепляния к ним. Любой Баг/Фичу всегда можно выделить. Для этого при инициализации библиотеки(своей или любой другой, например джуквери), происходит тестирование браузера на те или иные баги... И этот способ дает возможность работать правильно браузеру потом, когда будет исправлен баг.. А привязка к браузеру/агенту не даст возможность работать потом корректно, даже если баг будет убран. |
Цитата:
|
Вот какой способ определения типа браузера и версии предлагает Флэнаган в 6-м издании:
var browser = (function() {
var s = navigator.userAgent.toLowerCase();
var match = /(webkit)[ \/]([\w.]+)/.exec(s) ||
/(opera)(?:.*version)?[ \/]([\w.]+)/.exec(s) ||
/(msie) ([/w.]+)/.exec(s) ||
!/compatible/.test(s) && /(mozilla)(?:.*? rv:([\w.]+))?/.exec(s) ||
[];
return { name: match[1] || "", version: match[2] || "0" };
}());
|
| Часовой пояс GMT +3, время: 06:49. |