Недавно мне задали этот вопрос на собеседовании, особенно в отношении Javascript. Меня интересовал правильный ответ.
В чем именно разница между feature detection
, feature inference
и использованием строки User agent
?
Недавно мне задали этот вопрос на собеседовании, особенно в отношении Javascript. Меня интересовал правильный ответ.
В чем именно разница между feature detection
, feature inference
и использованием строки User agent
?
Обнаружение функций проверяет наличие функции, например:
if (window.XMLHttpRequest) {
new XMLHttpRequest();
}
Функция вывод проверяет функцию точно так же, как функцию обнаружение, но использует другую функцию, поскольку она предполагает, что она также существует, например:
if (document.getElementsByTagName) {
element = document.getElementById(id);
}
Проверка строки UA является старой практикой, и ее больше не следует использовать. Вы продолжаете изменять проверки UA и никогда не пользуетесь новыми реализованными функциями, например:
if (navigator.userAgent.indexOf("MSIE 7") > -1){
//do something
}
Обнаружение функции: фактическая проверка существования функции
if('localStorage' in window)
Вывод признаков: если x существует, мы можем предположить, что существует y
if('localStorage' in window){
window.sessionStorage.setItem("this-should-exist-too", 1);
}
Если вы полагаетесь на пользовательский агент, вам понадобится карта, в которой браузер X поддерживает функцию Y.
Обнаружение функции пытается определить, существует ли функция. Например, если браузер пользователя поддерживает LocalStorage или API геолокации.
if (navigator.geolocation) {
// geolocation possible.. do some stuff
}
Вывод функции предполагает, что поскольку вы обнаружили одну функцию, вы можете использовать другие функции. Например, если вы обнаружите API геолокации, возможно, вы предположите, что ваш пользователь использует современный браузер, и поэтому теперь доступно LocalStorage. Обычно плохо предполагать, поэтому гораздо лучше просто использовать обнаружение функций для каждой функции, которую вы хотите использовать, и иметь запасную стратегию на случай, если функция недоступна. Даже если у пользователя есть современный браузер с геолокацией, это не значит, что он позволит вашему приложению использовать его, поэтому планируйте его соответствующим образом.
Строка пользовательского агента просто читает глупую маленькую строку, которую отправляет каждый браузер, а затем вы можете сравнить эту строку с некоторыми известными браузерами, на которые вы ориентируетесь. Как правило, это очень старый способ ведения дел, и его легко подделать, поэтому у вас должна быть очень конкретная причина, чтобы пойти по этому пути (возможно, в среде нагрузочного тестирования или что-то в этом роде). См. вики по теме http://en.wikipedia.org/wiki/User_agent.
Вы получите к нему доступ в javascript, подобном:
navigator.userAgent
feature detection vs. user agent
, таких как обнаружение браузера и обнаружение функций - person Pekka   schedule 20.11.2013