почему `<! [endif] ->` появляется на странице, отображаемой в IE? - PullRequest
21 голосов
/ 25 марта 2012

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

Почему условный IE на этой тестовой странице отображает литерал <![endif]--> в нижней части страницы в 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>

Обновление:

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

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

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

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

Ответы [ 8 ]

5 голосов
/ 10 апреля 2012

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 или что-то в этом роде.

EDIT: заменен код на менее подробную версию, тот же результат

4 голосов
/ 30 марта 2012

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

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

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

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

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

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

2 голосов
/ 01 марта 2013

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

2 голосов
/ 16 апреля 2012

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

Многие сайты найдены в корпоративных интрасетях (читай: локальная сеть, например http://myPortalSite) способны сегодня работать с Internet Explorer 7 и ожидают «IE» вести себя как IE7. Чтобы сохранить совместимость с этими бизнес-сайты и приложения, IE8 по умолчанию Представление совместимости при отображении контента в «локальной интрасети» зона. Исключением является «Localhost» и адрес обратной связи (например, 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.

.
1 голос
/ 06 февраля 2014

HTML

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

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

CSS

.clean { display: none; }
1 голос
/ 12 октября 2012

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

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

0 голосов
/ 16 июля 2014

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

0 голосов
/ 16 апреля 2012

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

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