Обнаружение, если IE7 или ниже с условными комментариями и JavaScript не работает - PullRequest
6 голосов
/ 12 апреля 2011

Я пытаюсь проверить, использует ли человек что-либо IE с версией меньше 8 или чем-то еще.

Я использую условные комментарии, чтобы объявить логическое значение.

<!--[if lt IE 8]>
<script type="text/javascript">var badIE = true;</script>
<![endif]-->

И теперь я проверяю в своем файле js логическое значение так:

if (badIE == true){
    alert('You have bad IE!');
} else {
    alert('Bueno!');
}

Если я использую IE7 или IE6, он предупреждает: «У вас плохой IE!». Если я использую что-нибудь еще, он должен предупредить «Буэно!», Но это не так. В чем проблема?

Ответы [ 3 ]

20 голосов
/ 12 апреля 2011

Вам нужно сначала объявить переменную badIE как ложную, чтобы она работала, иначе код за пределами условного кода знает ничего о badIE

Попробуйте это:

<script>
    var badIE = false;
</script>

<!--[if lt IE 8]>
<script type="text/javascript">badIE = true;</script>
<![endif]-->

<script>
if (badIE == true){
    alert('You have bad IE!');
} else {
    alert('Bueno!');
}
</script>
5 голосов
/ 12 апреля 2011

Не прямой ответ (Нил о вас рассказал), но вас также может заинтересовать: http://code.google.com/p/ie7-js/

Со страницы:

IE7.js - это библиотека JavaScript для создания Microsoft Internet Explorerвести себя как совместимый со стандартами браузер.Он исправляет многие проблемы с HTML и CSS и обеспечивает корректную работу прозрачного PNG под IE5 и IE6.

Хотя, если вы используете jQuery, имейте в виду, что он выполняет много одинаковых вещей как эта библиотека.

2 голосов
/ 12 апреля 2011

Ваш условный оператор <!--[if lt IE 8]> ... <![endif]--> означает, что код между ними не будет выполнен, если веб-браузер не имеет версию IE ниже 8, что означает, что var badIE никогда не будет объявлено для всех других браузеров (т. Е. FireFox,IE8, IE9, Safari и т. Д.)

Поскольку он никогда не объявляется, вы получаете сообщение об ошибке сценария без вывода сообщений в фоновом режиме, когда браузер пытается выполнить if (badIE == true){, что означает, что браузер немедленно прекращает чтение скриптаи не пытается выполнить оператор alert('Bueno!');.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...