Браузер нюхает - PullRequest
       55

Браузер нюхает

4 голосов
/ 26 мая 2011

Я знаю, что браузерное шифрование не является правильным способом разработки сайта для нескольких браузеров.Мой вопрос, однако, не относится к разработке сайта, который ведет себя хорошо для каждого браузера.

Я хочу предложить пользователю возможность установить сайт как веб-приложение, если браузером является Google Chrome или Firefox 4+, так каквиджет, если это Opera, как расширение, если это Safari ... и т. д.

В основном я хочу скользить в div с кнопкой, предлагающей этот вид установки.Бесполезно показывать решение для веб-приложений, если браузер, например, Safari, так как Safari не поддерживает его.

Так как мне сделать это хорошим способом?

Я нашел это основаннымо функциях, а не об использовании агента

Безопасный, основанный на функциях способ обнаружения Google Chrome с помощью Javascript?

var is = {
  ff: window.globalStorage,
  ie: document.all && !window.opera,
  ie6: !window.XMLHttpRequest,
  ie7: document.all && window.XMLHttpRequest && !XDomainRequest && !window.opera,
  ie8: document.documentMode==8,
  opera: Boolean(window.opera),
  chrome: Boolean(window.chrome),
  safari: window.getComputedStyle && !window.globalStorage && !window.opera
}

Кажется, он работает для моих нужд и короток и негромоздкий и более или менее подменный сейф

Ответы [ 4 ]

3 голосов
/ 26 мая 2011

Взгляните на jQuery.browser: http://api.jquery.com/jQuery.browser/

Свойство $ .browser предоставляет информацию о веб-браузере, который обращается к странице, как сообщается самим браузером.Он содержит флаги для каждого из четырех наиболее распространенных классов браузеров (Internet Explorer, Mozilla, Webkit и Opera), а также информацию о версии.

Доступны следующие флаги:

webkit (по состоянию на jQuery1.4) safari (не рекомендуется) opera msie mozilla Это свойство доступно сразу.Поэтому безопасно использовать его, чтобы определить, вызывать или нет $ (document) .ready ().Свойство $ .browser устарело в jQuery 1.3, и его функциональность может быть перенесена в поддерживаемый командой плагин в будущем выпуске jQuery.

Поскольку $ .browser использует navigator.userAgent для определения платформы, онуязвим для подделки пользователем или искажения самим браузером.Всегда лучше полностью избегать специфичного для браузера кода.Свойство $ .support доступно для обнаружения поддержки определенных функций, а не полагается на $ .browser.

1 голос
/ 26 мая 2011

Не беспокойтесь о том, что считается правильным.Делай то, что работает;в этом случае, возможно, браузер сниффинг является лучшим или единственным хорошим вариантом.

0 голосов
/ 18 июня 2013

Вы можете попробовать: BrowserHawk, (http://www.cyscape.com/showbrow.asp)), который проверяет браузер на стороне сервера. Это теоретически уменьшит обработку на стороне браузера при определении того, что показывать конечным пользователям. Однако я недумаю, что это бесплатно. Среди их избранных клиентов - Yahoo, AOL, Cisco, Microsoft и Sun. Так что это для производственного использования только с большими ожиданиями конечных пользователей, посещающих сайт.

0 голосов
/ 26 мая 2011

Я никогда не понимал проблему только с использованием свойств из объекта навигатора:

<script>
    for(var item in navigator)
    {
        document.write('navigator.' + item + ': ' + navigator[item] + '<br>');
    }
</script>

Они говорят, что navigator.userAgent ненадежен, но сделать ваше исследование, он можетсочетаю с navigator.appName и navigator.vendor с высокой надежностью, я считаю.


ОБНОВЛЕНИЕ: март 2013

Вы должны проверить непосредственно,Вы хотите знать, если вы пытаетесь сделать вывод, вы делаете это неправильно.

Например.Если вы хотите использовать функцию, проверьте ее напрямую, не думайте, что если document.all, то вы можете использовать document.uniqueID.Тест для document.uniqueID напрямую.

Все знают, что использование navigator.userAgent для определения возможности использования window.localStorage - безумие, но они не понимают, что ie7: document.all && window.XMLHttpRequest && !XDomainRequest && !window.opera также делает то же самое в противоположном направлении.

Если вы действительно хотите знать, что такое пользовательский агент, то все, что вы можете отключить , это, к сожалению, объект navigator.

Подмена строки пользовательского агента не проблема,все равно не твое.

...