Обнаружение функций (также тестирование функций ) - это метод, используемый в веб-разработке для обработки различий между средами выполнения (обычно веб-браузеры или пользовательские агенты ) путем программного тестирования на предмет того, что среда может или не может предлагать определенные функции. Затем эта информация используется для того, чтобы приложение каким-либо образом адаптировалось к среде: для использования определенных API или адаптации для лучшего взаимодействия с пользователем.
Его сторонники утверждают, что это так. более надежный и перспективный, чем другие методы, такие как сниффинг пользовательского агента и специфичные для браузера взломы CSS.
Функциональный тест может принимать разные формы. По сути, это любой фрагмент кода, который дает некоторую степень уверенности в том, что требуемая функция действительно поддерживается. Однако, в отличие от других методов, обнаружение функций обычно сосредоточено на выполнении действий, которые напрямую связаны с обнаруживаемой функцией, а не на эвристике.
Поскольку JavaScript является наиболее распространенным сценарием. language в веб-браузерах многие методы обнаружения функций используют JavaScript для проверки DOM и локальной среды JavaScript.
Самый простой способ - проверить наличие соответствующего объекта или собственности. Например, API геолокации (используемый для доступа к информации устройства о его географическом местоположении, возможно, полученной от GPS-навигатора ) предоставляет свойство геолокации
в навигаторе
объект в DOM; наличие которого подразумевает, что API геолокации поддерживается:
if ('geolocation' в навигаторе) {// Geolocation API поддерживается}
Для большей уверенности некоторые тесты функций будут попытайтесь вызвать функцию, а затем найдите признаки того, что она вела себя правильно. Например, тест на поддержку файлов cookie может попытаться установить значение в качестве файла cookie, а затем проверить, что его можно прочитать.
Некоторые функции обозревателя считаются необнаруживаемыми, потому что не известно никаких подсказок, дающих достаточную уверенность в том, что функция поддерживается. Часто это происходит из-за ограниченной информации, доступной среде JavaScript в браузере; как правило, функции должны каким-либо образом отображаться через DOM, чтобы их можно было обнаружить с помощью JavaScript.
При обнаружении необнаруживаемых объектов обычно используют сниффинг пользовательского агента в качестве альтернативного механизма или применяют защитное кодирование, чтобы минимизировать воздействие, если функция переключается. не подлежит поддержке.
Проект Modernizr поддерживает запись известных необнаруживаемых объектов на своей вики.