Я уже выполнил обнаружение функции для конкретной функции, чтобы решить, могу ли я ее использовать или мне нужно использовать обходной путь. Но, к сожалению, я обнаружил, что в IE есть некоторые ошибки в этой функции, которые делают ее бесполезной для меня, даже если она присутствует. Таким образом, даже несмотря на то, что он проходит проверку функции, мне нужно определить, что браузер является IE, поэтому я не использую эту функцию, если это IE.
Я попытался посмотреть, смогу ли я обнаружить функции в фактическом поведении с ошибками (что было бы лучше всего, потому что оно будет адаптироваться, если IE исправит поведение в будущем), но, похоже, нет никакого способа сделать это (тема другого вопроса). Это означает, что мне осталось попытаться окончательно определить, что это браузер IE, чтобы я мог избежать ошибочной функции. Я не хочу использовать строку агента пользователя, так как мы все знаем, что ее легко подделать и легко ошибиться.
Итак, я хотел бы определить функцию, независимо от того, является ли это браузером IE или нет.
Подход, который у меня есть до сих пор, таков:
var isIE = (document.body.attachEvent && window.ActiveXObject);
Это проверяет, присутствует ли метод attachEvent()
и присутствует ли поддержка ActiveXObject
. Мне пришлось сделать больше, чем просто проверка attachEvent
, потому что Opera поддерживает attachEvent
.
Является ли это надежным способом обнаружения IE? Есть ли лучшие способы?
Пожалуйста, не отвечайте, что мне действительно не следует выполнять обнаружение браузера, вместо этого следует использовать обнаружение функций. Я уже занимаюсь обнаружением функций, но это вызвало проблему, потому что браузер, который «поддерживает» функцию и, таким образом, проходит обнаружение функции, оказывается настолько глючным, что я не могу использовать эту функцию в этом браузере. Итак, теперь я должен обнаружить глючный браузер.
Если вы хотите узнать больше о конкретной ситуации, в которой это используется, это описано в другой вопрос.