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:58. |