Я собираюсь сыграть защитника дьявола на мгновение. Я всегда задавался вопросом, почему обнаружение браузера (в отличие от обнаружения функции) считается плохим, как плохая практика. Если я тестирую определенную версию определенного браузера и подтверждаю, что определенная функциональность ведет себя в некотором предсказуемом виде, тогда, похоже, будет принято решение сделать особый случай. Причина в том, что она будет в будущем надежной, потому что эта частичная версия браузера не изменится. С другой стороны, если я обнаруживаю, что элемент DOM имеет функцию X, это не обязательно означает, что:
- Эта функция работает одинаково во всех браузерах и
- Более того, он будет работать одинаково даже во всех будущих браузерах.
Я просто заглянул в источник jQuery, и они обнаруживают функцию, вставляя тщательно продуманный фрагмент HTML в DOM, а затем проверяют его на определенные функции. Это разумный и надежный способ, но я бы сказал, что это было бы слишком тяжело, если бы я просто сделал что-то подобное в своем маленьком кусочке личного JavaScript (без jQuery). У них также есть преимущество практически бесконечных ресурсов QA. С другой стороны, то, что вы часто видите, что люди делают, это то, что они проверяют существование функции X, а затем, основываясь на этом, они предполагают, что функция будет вести себя определенным образом во всех браузерах, которые имеют эту функцию.
Я ничего не говорю в том смысле, что обнаружение функции не очень хорошо (если используется правильно), но мне интересно, почему обнаружение браузера обычно немедленно отклоняется, даже если оно звучит логично. Интересно, есть ли еще одна модная вещь.