Какой лучший способ обнаружить пользовательский агент клиента? - PullRequest
2 голосов
/ 03 июня 2010

Меня интересует, было бы наилучшим местом для определения пользовательского агента клиента, на стороне клиента (javascript) или на стороне сервера? Я поднял вопрос из-за того, что некоторые пользователи IE8 получают сообщение о том, что они используют IE6.

Ответы [ 5 ]

8 голосов
/ 03 июня 2010

Короткий и правильный ответ: не используйте ничего, что зависит от сниффинга UserAgent.

Чтобы быть уверенным в возможности корректировать пути кода, вы должны проверить конкретную «вещь», для которой настроен путь кода, в первую очередь функции. Это называется Функция обнаружения .

Так что, если функция X поддерживается, мы делаем это, если нет, мы делаем это.

Вывод, если поддерживается функция, на основе которой присутствует UserAgent, быстро завершится сбоем, особенно, когда новые отмеченные браузеры появятся. Возьмите следующий пример, который на самом деле можно найти в нескольких основных библиотеках (!)

if (isIE8) {
    // use new feature provided by IE8
} else if (isIE7) {
    // use not so new feature provided by IE7 (and IE8)
} else {
    // use fallback for all others (which also works in IE7 and IE8)
}

Как вы думаете, что произойдет, когда появится IE9?

Правильный шаблон в этом случае будет

if ("addEventListener" in foo) {
    // use DOM level 2 addEventListener to attach events
    foo.addEventListener(...
} else if ("attachEvent" in foo) {
    // use IE's proprietary attachEvent method
    foo.attachEvent(...
} else {
    // fall back to DOM 0
    foo["on" + eventName] = ....
}
5 голосов
/ 03 июня 2010

Пользовательский агент, доступный с обеих сторон, должен быть одинаковым, если только не происходит забавных вещей, которых обычно нет.

Если вы хотите показать сообщение пользователям IE6, я предлагаю вам использовать условные комментарии . Они специфичны для IE и отлично работают для определения версий IE.

0 голосов
/ 14 сентября 2010

Для тех, кому нужно , чтобы получить фактический пользовательский агент с помощью JavaScript, вы можете использовать navigator.userAgent

0 голосов
/ 04 июня 2010

Я не знаю, как вы проверяете пользовательский агент, но я бы сделал так:

<%=
case request.env['HTTP_USER_AGENT']
when /Safari/
    "it's a Mac!"
when /iPhone/
    "it's a iPhone"
else
    "i don't know :("
end
%>

проверка непосредственно в пользовательском запросе представляется наиболее последовательным способом проверки пользовательского браузера. И request.env доступен в вашем контроллере и представлениях, так что вы можете передать это rjs при необходимости.

0 голосов
/ 03 июня 2010

Информация, обнаруженная при обнаружении на стороне клиента или на сервере, в основном одинакова.

Имейте в виду, что очень легко подделать браузер, в котором вы находитесь. Не существует надежного способа точно определить все типы браузеров.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...