Как определить браузер IE?
Я уже обнаружил функцию обнаружения определенной функции, чтобы решить, могу ли я ее использовать или мне нужно использовать обход. Но, к сожалению, я обнаружил, что IE имеет некоторые ошибки в этой функции, которые делают ее бесполезной для меня, даже когда она присутствует. Поэтому, несмотря на то, что он передает обнаружение функции, мне нужно обнаружить, что браузер является IE, поэтому я не использую эту функцию, если это IE.
Я попытался выяснить, могу ли я обнаружить функцию обнаружения фактического поведения с ошибкой (что было бы лучше всего, потому что оно адаптировалось бы, если IE будет исправлять поведение в будущем), но, похоже, нет никакого способа сделать это что (вопрос другого вопроса). Это означает, что я остался с попыткой окончательно определить, что это браузер IE, поэтому я могу избежать ошибки. Я не хочу использовать строку useragent, так как все мы знаем, что она легко подделана и может быть легко ошибочной.
Итак, я хотел бы сделать обнаружение функции, будь то браузер IE или нет.
Подход, который у меня есть до сих пор, таков:
var isIE = (document.body.attachEvent && window.ActiveXObject);
Это выглядит, если присутствует метод attachEvent()
и присутствует поддержка ActiveXObject
. Мне нужно было сделать больше, чем просто проверку attachEvent
, потому что Opera поддерживает attachEvent
.
Является ли это надежным способом обнаружения IE? Есть ли лучшие способы?
Пожалуйста, не отвечайте, я действительно не должен делать обнаружение браузера, но вместо этого должен использовать обнаружение функции. Я уже делаю обнаружение функций, но это вызвало проблему, потому что браузер, который "поддерживает" функцию и, таким образом, пропускает обнаружение функции, оказывается настолько ошибочным, что я не могу использовать эту функцию в этом браузере. Итак, теперь я должен обнаружить багги-браузер.
Если вы хотите узнать больше о конкретной ситуации, в которой это используется, описано в этом другом вопросе.
Ответы
Ответ 1
Условные комментарии условная компиляция, поясняемая здесь:
http://www.quirksmode.org/css/condcom.html
Или родственник, найденный здесь:
http://www.javascriptkit.com/javatutors/conditionalcompile.shtml
Оба являются эксклюзивными Internet Explorer, поэтому они позволят вам обнюхивать IE.
<script type="text/javascript">
/*@cc_on
document.write("JScript version: " + @_jscript_version + ".<br>");
/*@if (@_jscript_version >= 5)
document.write("JScript Version 5.0 or better.<br \/>");
document.write("This text is only seen by Internet Explorer browsers that support JScript 5+<br>");
@else @*/
document.write("This text is seen by all other browsers (ie: Firefox, IE 4.x etc)<br>");
/*@end
@*/
</script>
Ответ 2
В связанном сообщении было дано предложение об условных комментариях. Это позволит вам обнаружить даже версию IE.
Добавьте в голову что-то подобное:
<!--[if lt IE 9]>
<script type="text/javascript">
var lt9=true;
</script>
<![endif]-->
Это специфично для IE и будет игнорироваться как комментарий в других браузерах.
Для простого обнаружения используйте что-то вроде этого:
<!--[if gte IE 6]>
<script type="text/javascript">
// this is IE greater than or equal to 6
var isIE=true;
</script>
<![endif]-->
Ответ 3
Использование условных комментариев, а не условной компиляции имеет то преимущество, что позволяет обнаруживать версию IE (в отличие от JScript-версии, которая лучше всего подходит для условной компиляции). Вы можете сделать это из script с помощью innerHTML
следующим образом. В следующем примере показано, как определить IE 8 или ниже:
var div = document.createElement("div");
div.innerHTML = "<!--[if lte IE 8]><i></i><![endif]-->";
var isIe8orLower = (div.getElementsByTagName("i").length == 1);
alert("Is IE 8 or lower: " + isIe8orLower);
Помните, что IE 10 и более поздние версии не поддерживают условные комментарии. Тем не менее, условная компиляция продолжает работать, и это следующий лучший вариант, поэтому я бы предложил использовать его, хотя, как упоминалось выше, он неспособен для идентификации фактической версии IE.