5

У меня есть страница веб-сайта, на которой отображается предупреждение, если вы используете неподдерживаемый браузер, IE < = 8. Это отлично работает в IE 8 и ниже, однако сегодня я тестировал в IE 10 и, похоже, также читал это условное. Он показывает окно предупреждения, когда это не должно. Я пробовал много вещей, но я не знаю, в чем проблема. Вот некоторые из кода:IE10 читает IE8 условные комментарии

<!DOCTYPE html> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
    <meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0" /> 
    <meta http-equiv="X-UA-Compatible" content="chrome=1"/> 
    <meta http-equiv="X-UA-Compatible" content="IE=edge"/> 
... 
</head> 
<!--[if lte IE 8]> 
    <div style="position:absolute;bottom:0px;left:0px;background-color:orange;color:white;z-index:1000;width:250px;text-align:center;">This content is best viewed in Chrome, Firefox or any other Modern Browser. <br/><strong>Please Upgrade. </strong></div> 
<![endif]--> 
+0

Отвечает ли он на IE 10? Можете ли вы сделать условие «IE 8, а не IE 10»? – Renan

+6

@Renan: Проблема в том, что IE10 не должен видеть условные комментарии * вообще *. – BoltClock

+0

(Ну, они видят их, но не должны пытаться их интерпретировать). – BoltClock

ответ

4

Stab в темноте, но, возможно, ИЭ путается вашими два X-UA-Compatible заголовков и так падает обратно совместимости по своей собственной воле. Это единственная ситуация, с которой я могу думать, что IE10 обрабатывает условные комментарии вместо того, чтобы игнорировать их прямо, потому что в представлении совместимости он эмулирует IE7, который равен lte IE 8, и таким образом будет получать контент, скрытый этим условным комментарием.

Посмотрите, что произойдет, если вы объедините их в один <meta> тег:

<meta http-equiv="X-UA-Compatible" content="IE=edge, chrome=1" /> 
+0

Если честно, я не вижу причин, по которым в Chrome все равно есть запись; Chrome не обращает на это внимания, и даже если бы это было так, почему бы вам хотелось, чтобы он эмулировал версию Chrome 1? – Spudley

+0

@Spudley: эта запись предназначена для Chrome Frame; 1 означает, что IE действует как Chrome, когда доступен плагин. – BoltClock

+0

Ну, Chrome Frame тоже устарел, но я думал, что он использовал 'frame = 1' .... хммм, может быть, вы правы. это было какое-то время, так как я использовал его. – Spudley

2

Функция «условных комментариев» было удалено из IE 10, в соответствии с Microsoft документа Conditional comments. Это означает, что IE 10 пропускает «условный комментарий» как просто комментарий (который соответствует спецификации HTML).

Это было подтверждено моим тестированием кода в вопросе на IE 10. Не появляется предупреждающее окно, независимо от настроек режима браузера. Таким образом, представляется вероятным, что на реальной странице есть некоторая синтаксическая ошибка, которая заставляет некоторый текст отображаться как обычный контент, а не «условный комментарий».

+1

Интересно, поэтому нет ни одного из этого вида совместимости voodoo. (Я должен был догадаться, потому что у меня нет тестовой среды, удобной на данный момент, с горечью.) – BoltClock

0

Итак, я отлаживал и пытался исправить код, чтобы он работал, и я думаю, что две вещи могли его исправить.
Во-первых: условный комментарий был объявлен до открытия тега body, и я предполагаю, что поскольку это элемент div, он должен содержаться с тегом body. Перемещение его внутри тела могло бы исправить.
Во-вторых: у меня также был тег сценария, в котором была указана глава документа с несколькими скриптами jQuery. Перемещение этого тега в конец тега тела может также устранить проблему.