Подтвердить что ты не робот

Как определить браузер IE?

Я уже обнаружил функцию обнаружения определенной функции, чтобы решить, могу ли я ее использовать или мне нужно использовать обход. Но, к сожалению, я обнаружил, что IE имеет некоторые ошибки в этой функции, которые делают ее бесполезной для меня, даже когда она присутствует. Поэтому, несмотря на то, что он передает обнаружение функции, мне нужно обнаружить, что браузер является IE, поэтому я не использую эту функцию, если это IE.

Я попытался выяснить, могу ли я обнаружить функцию обнаружения фактического поведения с ошибкой (что было бы лучше всего, потому что оно адаптировалось бы, если IE будет исправлять поведение в будущем), но, похоже, нет никакого способа сделать это что (вопрос другого вопроса). Это означает, что я остался с попыткой окончательно определить, что это браузер IE, поэтому я могу избежать ошибки. Я не хочу использовать строку useragent, так как все мы знаем, что она легко подделана и может быть легко ошибочной.

Итак, я хотел бы сделать обнаружение функции, будь то браузер IE или нет.

Подход, который у меня есть до сих пор, таков:

var isIE = (document.body.attachEvent && window.ActiveXObject);

Это выглядит, если присутствует метод attachEvent() и присутствует поддержка ActiveXObject. Мне нужно было сделать больше, чем просто проверку attachEvent, потому что Opera поддерживает attachEvent.

Является ли это надежным способом обнаружения IE? Есть ли лучшие способы?

Пожалуйста, не отвечайте, я действительно не должен делать обнаружение браузера, но вместо этого должен использовать обнаружение функции. Я уже делаю обнаружение функций, но это вызвало проблему, потому что браузер, который "поддерживает" функцию и, таким образом, пропускает обнаружение функции, оказывается настолько ошибочным, что я не могу использовать эту функцию в этом браузере. Итак, теперь я должен обнаружить багги-браузер.

Если вы хотите узнать больше о конкретной ситуации, в которой это используется, описано в этом другом вопросе.

4b9b3361

Ответ 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.