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

Почему `<! [endif] ->` отображается на странице, отображаемой в IE?

У этого полученного, чтобы быть действительно пронзительным. Но после прочтения одного и того же очень простого ответа снова и снова в разных блогах и на сайте Microsoft, это AFAICT я AM делает все правильно, я все еще я спрашиваю здесь:

Почему условный код IE на этой тестовой странице отображает литеральный <![endif]--> в нижней части страницы в IE при просмотре в локальной сети? Я вполне уверен, что это правильный синтаксис для IE "Даунлайвел-скрытый условный комментарий".

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <title>IEconditionalSyntax_wtf.html</title>
</head>
<body>
    well?<br>
    <!--[if IE]>
        wtf?!
    <![endif]-->
</body>
</html>

Update:

чтобы сэкономить время на чтение всех комментариев... если у вас такая же проблема: Большинство комментариев ниже в основном просто предлагают возможные (но неубедительные, неэффективные) объяснения, а пара ребята сообщают, что они не смогли воспроизвести проблему. До сих пор, похоже, никто не знает ответа. Я вижу проблему только при просмотре страницы в IE9/Win7 (с любым режимом браузера/документа)... на моем локальном сервере (страница, обслуживаемая моим локальным iMac 10.6.8, с встроенным веб-сервером).

Но только потому, что никто не смог избавить мой локальный сервер от этой проблемы, не обязательно означает, что приведенные ниже предложения не будут отвечать на эту проблему за вас. До тех пор, пока мы не узнаем ответ (ы), я полагаю, что ничего не полезно. Поэтому вы, вероятно, захотите попробовать все, перечисленные ниже, если у вас также есть <![endif]-->, появляющийся на вашей странице в IE, по-видимому, нет веской причины.

Патрик дает большое обходное решение, но он полагается на jquery.

Я обсуждал, следует ли присуждать награду (которую я начал и которая истек 16 апреля 2012 года), или принять ответ, чтобы там, где было получено подтверждение, было присуждено... и для меня не было четких действий. поэтому я просто решил позволить системе автоматически присуждать половину щедрости Патрику за отличный (хотя и jQuery) обходной путь. Я не хотел давать всю щедрость, потому что весь смысл щедрости заключался в том, чтобы удовлетворить мое любопытство относительно того, почему я вижу условный комментарий в первую очередь. Я также не хотел принимать какой-либо ответ (пока), потому что в этом случае я не собираюсь использовать какое-либо обходное решение, так как проблема появляется только в моей локальной сети и поэтому не имеет отношения к производственному кодексу, который живет в мире.

4b9b3361

Ответ 1

IE10 не поддерживает условные комментарии, поэтому я предлагаю использовать другой метод вообще.

Javascript хорошо работает для этого.

Вот что я делаю, это намного проще в использовании, требуется jquery

var userAgent, version;

if ($.browser.msie) {
  version = "ie" + $.browser.version.substring(0, 1);
  $("body").addClass("ie " + version);
} else if ($.browser.mozilla) {
  $("body").addClass("mozilla");
  if (navigator.userAgent.toLowerCase().indexOf('firefox') !== -1) {
    userAgent = navigator.userAgent.toLowerCase();
    userAgent = userAgent.substring(userAgent.indexOf('firefox/') + 8);
    userAgent = userAgent.substring(userAgent.indexOf('firefox/'), userAgent.indexOf('.'));
    version = "ff" + userAgent;
    $("body").addClass(version);
  }
} else if ($.browser.opera) {
  $("body").addClass("opera");
} else if ($.browser.webkit) {
  $("body").addClass("webkit");
}

Затем вы можете написать css следующим образом:

span.something { width: 30px; }
.ie7 span.something {width: 25px;}

И еще лучше, используйте это совместно с modernizr, и вы также можете писать правила на основе поддержки функций. Обратите внимание, что это глобальные переменные js, поэтому вы можете использовать их для разных функций на основе браузера. Например, если вам нужно написать тэг ie7 или что-то еще.

РЕДАКТИРОВАТЬ: заменить код с более подробной версией, тем же результатом

Ответ 2

Я имею дело с аналогичной проблемой на работе atm.

Я бы рекомендовал снова протестировать его с автоматическим обнаружением интрасети:

Access Internet Options via Tools menu in IE or via the Control Panel

Плюс все настройки режима совместимости установлены на выкл.

Плюс с добавлением метатега IE = edge

Я думаю, что это может решить проблему - IE - странный зверь!

Ответ 3

Это потому, что IE по умолчанию рассматривает совместимость в локальной сети:

Многие сайты, найденные в корпоративных интрасетях (читайте: локальная сеть, например http://myPortalSite) - это Internet Explorer 7, способный сегодня и ожидать "IE" будет действовать как IE7. Чтобы сохранить совместимость с этими веб-сайтах и ​​приложениях на основе бизнеса, IE8 по умолчанию Просмотр совместимости при отображении содержимого в локальной локальной сети зона. Исключением является "Localhost" и "loopback address" (например, 127.0.0.1 + эквивалент IPv6). Эти адреса отображаются в IE8 Стандартные режимы по умолчанию для удовлетворения потребностей веб-разработчиков и дизайнеры, которые часто тестируют страницы, предназначенные для интернет-потребления (где стандарты IE8 являются стандартными) на локальных веб-серверах.

Пользователи могут переопределять параметр локальной интрасети путем проверки 'Отобразить сайты интрасети в режиме совместимости в Инструментах → Параметры просмотра совместимости.

http://blogs.msdn.com/b/ie/archive/2009/06/17/compatibility-view-and-smart-defaults.aspx

Чтобы уточнить, вы видите это, потому что вы обращаетесь к сайту с использованием 192.168.x.x, тогда как я готов поспорить, что все, кто не видит эту проблему, используют 127.0.0.1/localhost.

Ответ 4

Я добавил <!--<![endif]--> вместо <![endif]-->, и он исчезает.

Ответ 5

У меня была аналогичная проблема, когда условное выражение было в моих <head> и <![endif]--> показано вверху страницы, когда я отображал ее в любом браузере IE, даже когда я загрузил код на сервер.

Поскольку это была последняя строка перед </head>, я решил переместить мой вызов css для печати (что мне нужно было сделать в любом случае), чтобы быть последней строкой перед </head> и "voila!". теперь <![endif]--> больше не отображается в IE - даже на моем локальном сервере.

Ответ 6

HTML

<span class ="clean"><!--[if lt IE]></span>

<span class="clean"><![endif]--></span>

CSS

.clean { display: none; }

Ответ 7

условные комментарии отображаются только Internet Explorer, интернет-исследователь 9 и выше должен поддерживать большинство элементов в комментариях css.the, которые будут хорошо работать со всеми версиями IE (лучше всего использовать с 5 и 6).

Ответ 8

У меня недавно была эта же проблема. В моем случае конфликтный код был одним из элементов, которые у меня были внутри условного оператора IE, имеющего самый низкий индекс z на странице. После установки этого порядка, чтобы он не был самым низким индексом z, он был исправлен.