Почему Internet Explorer 11 не учитывает условные комментарии даже при имитации режима документов Internet Explorer 8?

110

Я использую новые инструменты разработчика Internet Explorer 11, чтобы переключить режим документа на «8», но условные комментарии по-прежнему игнорируются, то есть они не анализируются должным образом и ведут себя как обычные комментарии. Таким образом, любой файл, на который есть ссылка внутри условного комментария, не запрашивается / не загружается браузером.

Почему это происходит? Это ошибка?

Если вы считаете, что это действительно ошибка, которую необходимо исправить, войдите и скажите, что вы тоже можете воспроизвести это в отчете об ошибке Microsoft, который сообщается для этой проблемы:
Условные комментарии не работают при эмуляции режимов документа с помощью F12 Developer Инструменты .

Обновление: эта проблема была исправлена ​​в упомянутом отчете об ошибке.

thasmo
источник
18
Задаю себе тот же вопрос! Я знаю, что они сбросили условные комментарии в IE10, но ИМХО эмулятор должен учитывать их при тестировании старых браузеров.
Александр Рехштайнер
12
Действительно, это делает эту функцию непригодной для использования.
thasmo
3
Настоящий вопрос в том, почему вы используете режим совместимости? Мой совет - избегать режима совместимости, как чумы. Он определенно не подходит для тестирования, независимо от проблемы, которую вы описали, поскольку с ним связаны известные ошибки и причуды, которые восходят к тому моменту, когда они впервые представили режим совместимости. Если вы тестируете обратную совместимость, вам действительно нужно использовать настоящую копию IE8 (и IE9 и т. Д.). Перейдите на modern.ie и загрузите виртуальные машины, которые они предоставляют для тестирования.
Spudley
19
В системе отслеживания ошибок IE обнаружена ошибка. Я призываю всех посетить и сказать Microsoft, что вы можете воспроизвести это. connect.microsoft.com/IE/feedback/details/806767/…
Евгений
15
Я думаю, что использование режима совместимости для тестирования имеет больше смысла, чем загрузка 1/2 гигабайта или около того изображения для каждого браузера. Итак, есть ошибки (и это, вероятно, одна из них), но в 99% случаев это просто работает.
Rolf

Ответы:

29

согласно сJacob Rossi [MSFT]

Это должно быть исправлено в обновлении 1 для IE11, выпущенном на прошлой неделе .

Это было опубликовано 22 апреля 2014 года.

Проведя несколько тестов, я действительно обнаружил, что это было исправлено, и все снова идет гладко для тестирования самого замечательного браузера из когда-либо созданных ... Internet Explorer!

L84
источник
4
За это нужно проголосовать больше. Мне пришлось копаться в двух ответах на переполнение стека, чтобы добраться сюда.
Тек
@Lynda: Не могли бы вы опубликовать свою версию IE11? мой
Мохамед Хуссейн,
1
@MohamedHussain - Моя версия - 11.0.9600.17690IC.
L84,
3
Вы ДОЛЖНЫ быть саркастичными.
паддотк
О том, что IE - «самый удивительный браузер»?
паддотк
20

Я просто попытался использовать это в 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, в котором есть некоторые изменения.

DylRicho
источник
4
Да, IE 11 - лучший опыт, со всей действительно работающей анимацией :). Да, у MS есть история «возиться» с вещами, когда пользователи начинают к ним привыкать. Посмотрите, что они сделали с Windows XP ... «Исправляем то, что не сломано», - скажут некоторые. В любом случае это отстой
Рольф
9
Браузеры Internet Explorer настолько плохи. Нет согласованности между версиями. Кто, черт возьми, это придумал? даже моя бабушка могла бы работать лучше!
Adrien Be
4
РЕДАКТИРОВАТЬ: они исправляют это (или пытаются) с 22 января 2014 года connect.microsoft.com/IE/feedback/details/806767/…
Адриен Бе
@AdrienBe Что ж, это определенно шаг в правильном направлении.
DylRicho
1
@Anthony Мой ответ неверен? Как так? В основном это говорит то, что вы только что сказали.
DylRicho
17

Это сработало для меня и кажется самым элегантным / простым исправлением ( 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 */
}
смартин
источник
Отлично, спасибо. Когда Microsoft собирается убить этот беспорядок?
Kohjah Breese
Танк для этого, IE 11 не соблюдает старый условный метод. <! - [if IE]>
Джино
8

Недавно я столкнулся с той же проблемой. Я также обнаружил, что некоторые условные комментарии работают:

  • gt и lt работал нормально
  • gte и lte никогда не работал

Таким образом, одним из возможных решений было бы изменить условные операторы, чтобы использовать gt и ltоператоров.

Другой альтернативой, которая показалась мне более полезной, было использование такой службы, как browserstack .

user1429980
источник
8

У меня есть другое решение для этого.

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" />');
}
Андрей Константинов
источник
2
Я тестировал режимы документов и, похоже, не меняет пользовательский агент ?!
mgutt
@mgutt Ты прав. В эмуляции есть два варианта - режим документа и пользовательский агент. Режим документа изменяет то, как работает браузер и как он отображает страницу, а пользовательский агент меняет, какой браузер сообщает сайту о версии браузера. (в моем примере это переменная $ _SERVER ['HTTP_USER_AGENT'], которая содержит эту информацию) Итак, в основном вам нужно изменить обе эти опции, например, на IE8.
Андрей Константинов
@ Эндрю Спасибо. Теперь нашел настройку. Проблема была в немецком переводе. Они перевели «пользовательский агент» на «Zeichenfolge des Benutzer-Agents», и я подумал, что это означает кодировку. Некоторые вещи не следует переводить;)
mgutt 02
2
Это лучшее решение. Я преобразовал его в ASP.NET MVC Razor, и он отлично работает: @ {if (Request.UserAgent.Contains ("MSIE 8.0")) {/ * здесь ваш метатег * /}}
Валерио Джентиле,
Этот сайт представляет собой удобную справочную информацию о том, как выглядят все перестановки строк пользовательских агентов: useragentstring.com/pages/Internet%20Explorer
Дрю
4

У меня была такая же проблема - это сводило меня с ума все утро. Я добавил 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.

Эль Кабонг
источник
Условные комментарии не полагаются на скрипт или сторонний код.
Walf
@Walf - правда, но они также не поддерживаются в IE. См. Здесь: msdn.microsoft.com/en-us/library/ie/hh801214(v=vs.85).aspx
Эль-Кабонг
3

Я не видел, чтобы это упоминалось здесь, но в этом отчете об ошибке отмечается, что если вы измените настройки представления совместимости, условные комментарии будут работать должным образом. Так:

  1. В IE11 нажмите «Инструменты».
  2. Параметры просмотра в режиме совместимости
  3. Введите URL-адрес и нажмите Добавить.

Кажется, теперь на моем локальном хосте все работает нормально. Я не тестировал это тщательно, но, возможно, это кому-то поможет.

Just Plain High
источник
Но посетители вашего сайта должны будут сделать то же самое, чтобы получить тот же результат. Делает это бесполезным.
паддотк
Да. Но это для тех, кто тестирует старые версии IE с помощью инструментов разработчика IE11. Таким образом, используя IE11, но работающий как IE8, условные комментарии работать не будут. Для тех, кто действительно использует IE8, условные комментарии будут работать. Наверное ^ _ ^
Just Plain High
1

Некоторые условные комментарии работают, такие как ' 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 8 называется 'screen-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 предлагают МНОГО замечательных функций, что делает это не так уж и много.

Робен Б
источник