Короткий и правильный ответ: не используйте ничего, что зависит от сниффинга 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] = ....
}