Почему Internet Explorer 11 не учитывает условные комментарии даже при эмуляции режима документов Internet Explorer 8?
Я использую новые инструменты разработчика Internet Explorer 11 для переключения режима документа на "8", но условные комментарии по-прежнему игнорируются, то есть они не анализируются должным образом и ведут себя как обычные комментарии. Таким образом, любой ссылочный файл внутри условного комментария не запрашивается / не загружается браузером.
Почему это происходит? Это ошибка?
Если вы считаете, что это действительно ошибка, которую необходимо исправить, войдите и скажите, что вы тоже можете воспроизвести это в отчете об ошибках Microsoft, который сообщается об этой проблеме:
Условные комментарии не работают при эмуляции режимов документов с помощью F12 Developer Tools.
Обновление: эта проблема была исправлена в упомянутом отчете об ошибке.
8 ответов
По словам Jacob Rossi [MSFT]
Это должно быть исправлено в Обновлении 1 для IE11, выпущенном на прошлой неделе.
Это было опубликовано 22 апреля 2014 года.
Когда я сам провел несколько тестов, оказалось, что это было исправлено, и все снова работает гладко для тестирования самого удивительного браузера из когда-либо созданных...Internet Explorer!
Я просто попытался использовать это в Internet Explorer 11 в Windows 7, чтобы убедиться, что мои используемые семантические элементы HTML5 создавались для Internet Explorer 8 и ниже (с помощью условных комментариев), и браузер просто игнорирует их. -_-
Эта функция прекрасно работала в Internet Explorer 10, и Microsoft просто пришлось повозиться с ней, не так ли?
<!--[if lte IE 8]><script src="ie8-html5.js"></script><![endif]-->
Помимо этого, я на самом деле наслаждаюсь Internet Explorer, который вносит изменения.
Это сработало для меня и кажется наиболее элегантным / простым исправлением ( Internet Explorer 10 и Internet Explorer 11, я думаю, единственные браузеры, которые поддерживают -ms-high-contract
):
@media screen and (-ms-high-contrast: active), (-ms-high-contrast: none) {
/* IE10+ specific styles go here */
}
У меня есть другое решение для этого.
Internet Explorer 11 с включенным режимом совместимости Internet Explorer 8 содержит строку "MSIE 8.0", поэтому:
(Пример PHP)
if (strpos($_SERVER['HTTP_USER_AGENT'],'MSIE 8.0') !== false) {
$head[] = sprintf('<link rel="stylesheet" href="ie8.css" />');
}
Я недавно столкнулся с той же проблемой. Я также обнаружил, что некоторые условные комментарии работают:
gt
а такжеlt
работал нормальноgte
а такжеlte
никогда не работал
Таким образом, одним из возможных решений было бы изменение условных операторов для использования gt
а также lt
операторы.
Другой альтернативой, которая мне показалась более полезной, было использование службы, подобной браузерному стеку.
У меня была такая же проблема - это сводило меня с ума все утро. Я добавил Modernizr и выбрал все опции, включая yepnope.js.
Итак, теперь мой тест выглядит так:
Modernizr.load({
test: Modernizr.canvas,
nope: ['Content/Site-ie-8.min.css', 'Content/font-awesome-ie7.min.css']
});
В этом случае я проверяю холст (который не поддерживается до Internet Explorer 9), поэтому я загружаю свой условный контент. Теперь это работает при переключении режимов браузера в инструментах разработчика Internet Explorer 11.
Я не видел, чтобы это упоминалось здесь, но в этом отчете об ошибках отмечено, что, если вы измените настройки представления совместимости, условные комментарии будут работать, как и ожидалось. Так:
- В IE11 нажмите "Инструменты"
- Совместимость просмотра настроек
- Введите URL-адрес и нажмите кнопку Добавить
Кажется, теперь работает нормально на моем localhost. Я не проверял это подробно, но, возможно, это кому-то поможет.
Некоторые из условных комментариев работают, например:gt
' а также 'lt
', но, например,<!--[if IE 8]>
не работает. Это, безусловно, неудобно для разработчиков, которые хотят попробовать, как их веб-страницы выглядят в разных версиях браузеров Internet Explorer, но это не все плохие новости.
Хотя условные комментарии не работают, вы все равно можете проверить, как ваша веб-страница выглядит в каждой из версий Internet Explorer, добавляя таблицы стилей по одному: допустим, вы получили таблицу стилей для Firefox, Chrome, Internet Explorer 10 и Internet Explorer. 11 называетсяscreen.css
и другая таблица стилей ТОЛЬКО для Internet Explorer 9 называетсяscreen-ie9.css
и еще один называется только для Internet Explorer 8screen-ie8.css
".
Чтобы проверить свои веб-страницы ТОЛЬКО для Internet Explorer 9, вы можете сделать это:
<link rel="stylesheet" href="path/css/screen.css" type="text/css" />
<link rel="stylesheet" href="path/css/screen-ie9.css" type="text/css" />
и в разделе инструментов для разработчиков F12, раздел "Эмуляция", установите "Режим документа" на "9" и "Строка агента пользователя" на "Internet Explorer 9". Режим документа - это стандарт, который использует Internet Explorer 9, а строка агента пользователя - это сам браузер.
PS: я предполагаю, чтоscreen.css
"это ваша базовая таблица стилей, поэтому я называю ее первой, а не" перезаписываю "Internet Explorer 9, исправляя позже"screen-ie9.css
второй
Делая это, вы можете быть "уверены" (мне нужно проверить виртуальные машины, чтобы написать слово "уверен" без кавычек), что вы просматриваете свою веб-страницу в браузере Internet Explorer 9. Когда вы закончите тестирование и стилизацию в Internet Explorer 9 и захотите протестировать его в Internet Explorer 8, вы можете легко сделать то же самое, заменив это:
<link rel="stylesheet" href="path/css/screen-ie9.css" type="text/css" />
с этим:
<link rel="stylesheet" href="path/css/screen-ie8.css" type="text/css" />
Таким образом, это просто вопрос НЕСКОЛЬКО неудобств со стороны Microsoft, НО инструменты нового разработчика F12 предлагают МНОГО потрясающих функций, что делает это не такой уж большой проблемой.