Internet Explorer 11 отключил «отображать сайты интрасети в режиме совместимости» через метатег, не работающий

101

Я работал над веб-сайтом интрасети более 6 месяцев, где я использовал приведенный ниже doctypeметатег совместимости html5 и edge, чтобы заставить Internet Explorer не эмулировать старую версию браузера, и это сработало.

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8" />
    <title>My title</title>
    <meta http-equiv="X-UA-Compatible" content="IE=EDGE" />
</head>
<body>
</body>
</html>

Причина, по которой я делал это таким образом, заключается в том, что в том месте, где я работаю, используется параметр политики, позволяющий включить представление совместимости для всех сайтов интрасети, и этот подход с использованием EDGEпараметра работал в Internet Explorer 9.

Настройка представления совместимости сайта интрасети

Более месяца назад я был обновлен до Internet Explorer 11, и сайт все еще работал, как ожидалось.

Сегодня это перестало работать, как ожидалось, я не могу сказать наверняка, но я думаю, что политика, которая заставляет представление совместимости, не была включена в IE11, и теперь это так ... и поскольку это было включено, метатег совместимости больше не делает то, что ожидается, и этот сайт работает в режиме Enterprise, который имитирует IE8.

Кто-нибудь знает, как исправить это и принудительно использовать IE11 на сайте интрасети, когда принудительно применяется совместимость «Режим предприятия»? и нельзя отключить в настройках браузера?

РЕДАКТИРОВАТЬ

Я только что попытался добавить настраиваемый заголовок в свой web.config, как описано в этом ответе https://stackoverflow.com/a/18257208/98706

и это не сработало для меня, я все еще получаю сообщение ниже в консоли панели инструментов разработчика

HTML1122: Internet Explorer is running in Enterprise Mode emulating IE8.

Это как если бы версия 8 рассматривалась как версия, edgeкогда этот параметр совместимости с интрасетью включен в IE11.

Это сообщение: https://www.leapinggorilla.com/Blog/Read/1016/ie-ate-my-css---disables-compatability-mode объясняет это хорошо, я еще не пробовал установить этот заголовок с помощью кода и у наших пользователей нет доступа к изменению настроек своего браузера ... ни одно из других изменений пока не помогло.

ОБНОВИТЬ

Пожалуйста, посмотрите мой комментарий к этому сообщению о том, в чем разница между режимом Enterprise и режимом совместимости, потому что это важно.

Дорогой
источник
Корпоративный режим отличается от представления совместимости, см. Stackoverflow.com/a/26463309/98706 , чтобы узнать, как его отключить, но в моем случае это не так просто, как отключить его, я хотел переопределить его для определенных сайтов интрасети используя метатег, но это не сработало, с тех пор я не пробовал снова, потому что наши сайты теперь находятся в белом списке.
Дорогой

Ответы:

93

Удостовериться:

<meta http-equiv="X-UA-Compatible" content="IE=edge">

- это первый <meta>тег на вашей странице, иначе IE может его не уважать.

Кроме того, проблема может заключаться в том, что IE использует режим предприятия для этого веб-сайта:

  • В вашем вопросе упоминалось, что консоль показывает: HTML1122: Internet Explorer is running in Enterprise Mode emulating IE8.
  • В этом случае вам может потребоваться отключить режим предприятия (или подобный ему ) или отключить его для этого веб-сайта в меню «Инструменты» в IE.
  • Однако режим предприятия теоретически должен быть заменен тегом X-UA-Compatible, но в IE может быть ошибка ...
воробей
источник
Да, я уже делал это с тех пор, к сожалению, это не сработало :(
Дорогой
Возможно, для этого веб-сайта
включен
2
«Режим предприятия» и «Просмотр в режиме совместимости» - разные, хотя и похожие. Даже если установлен флажок «Отображать сайты интрасети в режиме совместимости», тег X-UA-Compatible должен иметь приоритет над этим. Однако режим предприятия может переопределить это ... видите ли вы значок режима предприятия ( media.askvg.com/articles/images5/… ) на своем сайте?
воробей
1
И что он говорит, если вы нажимаете F12 и смотрите на вкладку эмуляции? Он должен рассказать вам, почему он использует режим документа. Я думаю, вы попали в режим Enterprise, а не в режим совместимости.
воробей
19
Это так! @ # $ Раздражает, тратя впустую сотни тысяч часов веб-разработчиков по всему миру.
Сэм Уоткинс,
19

Эта проблема обычно возникает из-за того, что URL-адрес веб-сайта / интрасети помещен в один из:

  • Список режимов совместимости
  • Зона интрасети Internet Explorer
    (с включенным параметром Отображать сайты интрасети в режиме совместимости)
  • Список режима предприятия

В корпоративных сетях эти параметры просмотра совместимости часто управляются централизованно с помощью групповой политики . В вашем случае, похоже , виноват режим предприятия .

IE 11 корпоративный режим

К сожалению, установка META X-UA-Compatible не отменяет этого.

Конечным пользователям

Иногда для конечных пользователей единственный способ изменить это - нажать F12 и изменить режим документа на вкладке « Эмуляция» . Однако этот параметр не является постоянным и может быть восстановлен после закрытия инструментов разработчика.

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

Чтобы просмотреть список доменов, входящих в зону интрасети, перейдите по ссылке:

Инструменты -> Свойства обозревателя -> Безопасность -> Сайты -> Дополнительно

Если список содержит ваш поддомен и выделен серым цветом, вы не сможете переопределить представление совместимости, пока администратор сети не разрешит это.

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

Для сетевых администраторов

Загрузка веб-сайта с открытыми инструментами разработчика (F12) часто сообщает о причине перехода IE в более старый режим.

Все 3 упомянутых выше параметра обычно контролируются с помощью групповой политики, хотя иногда их можно переопределить на пользовательских машинах.

Если проблема в режиме предприятия (как в случае с исходным плакатом), вам могут быть полезны следующие две статьи:

ржавый
источник
Я расширил ваш отличный ответ некоторыми подробностями, которые обнаружил в ходе недавнего исследования. Я надеюсь, что все в порядке.
Саймон Ист
8

Тем, кто создает проект ASP.NET MVC, убедитесь, что вы добавили:

<meta http-equiv="X-UA-Compatible" content="IE=edge">

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

Джейсон Марселл
источник
Моя проблема была связана с новым режимом Enterprise в IE11, который заставляет браузер эмулировать IE8. Это не то же самое, что режим совместимости, для переопределения которого используется этот метатег. Я правильно это использовал.
Дорогой,
Мой комментарий был призван помочь другим с такими же симптомами, которые создают сайты в ASP.NET MVC. Я обращался не к вам конкретно.
Джейсон Марселл
Мета-тег будет работать (для проблем с режимом совместимости, а не для проблем с режимом Enterprise) для сайтов без .NET / MVC, кстати, он не специфичен для ASP.NET
Дэн Харрис,
4

Отмеченный ответ - правильный. Однако, Прайси, вы должны следить за этим с помощью групп администратора AD и рабочего стола. Они неправильно используют список сайтов IE11 Enterprise Mode. Microsoft НЕ планирует использовать его для всех сайтов интрасети в организации. Это будет распространять существующий параметр «отображать все сайты интрасети в режиме совместимости», который является проклятием для продвижения корпоративных веб-сайтов во всем мире.

Он предназначен для реализации в виде «черного списка», при этом несколько сайтов, которым действительно требуется устаревший режим браузера, перечислены в списке режима предприятия с указанием их требований к отображению. После этого все остальные сайты в вашей организации будут освобождены для использования Edge. Люди в вашей организации, которые внедрили его со всеми сайтами интрасети, включенными с самого начала, совершенно неправильно поняли, как предполагается реализовать режим предприятия.

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

Вопрос немного устарел, но я решил очень похожую проблему. У нас есть несколько сайтов интрасети, в том числе тот, за который я отвечаю, а остальные требуют режима совместимости, иначе они сломаются. По этой причине правила сайта по умолчанию IE работают в режиме совместимости на сайтах интрасети. Я обновляю свои собственные данные и больше не нуждаюсь в них; на самом деле, некоторые из функций, которые я пытаюсь использовать, не выглядят правильно в режиме совместимости. Я использую метатег IE-Edge, как и вы.

IE предполагает, что веб-сайты без полного адреса являются интрасетью, и действует соответственно. Имея это в виду, я просто изменил привязки в IIS, чтобы прослушивать только полностью квалифицированный адрес, а затем настроил фиктивный веб-сайт, который прослушивал неквалифицированный адрес. Второй перенаправляет весь трафик на полный адрес, заставляя IE считать, что это внешний сайт. Сайт отображается правильно с установленным флажком "Режим совместимости на сайтах интрасети" или без него.

Майк Андерсон
источник
см. stackoverflow.com/questions/2518256/… если у вас есть доступ к web.config.
fontophilic
Я видел этот вопрос раньше, но, похоже, принял строку заголовка HTTP за строку META и подумал, что уже пробовал. Это сработало нормально, как только я это поправил. Спасибо, что указали мне на это.
Майк Андерсон,
Я попытался применить ту же настройку EDGE совместимости в веб-конфигурации, и это не сработало для меня, единственный способ, которым я нашел эту работу, - это запросить наши конкретные веб-сайты, которые будут добавлены в белый список, чтобы они игнорировались из нового IE11 Enterprise mode, который, похоже, отличается от режима совместимости. Это ни в коем случае не лучшее решение для меня из-за циклов, через которые мне приходится каждый раз перепрыгивать, чтобы делать это.
Pricey
Похоже, вы пошли той же дорогой, что и я. Мне нужно было сделать 2 вещи. 1 - это параметр EDGE в теге META страницы. Возможно, вы сможете сделать это в web.config (или нет; я не знаю), но я сделал это на главной странице сайта. Другой - добавление настраиваемого HTTP-заголовка в web.config.
Майк Андерсон,
1

Это старая проблема с хорошей информацией. Но я только что обнаружил, что использование FQDN отключает режим совместимости в IE 9-11. Пример. У меня проблема с
совместимостью с http: // lrmstst01: 8080 / JavaWeb / login.do,
но проблемы исчезают с
http://lrmstst01.mydomain.int:8080/JavaWeb/login.do
NB: .int является частью наш внутренний домен

Дин П.
источник
Эти ссылки недействительны. Они используются в качестве примера URL-адреса только с именем компьютера по сравнению с URL-адресом с полным доменным именем.
Дин П.
2
Совет от профессионала: Example.com существует именно для этой цели
Basic
Это все еще проблема, и этот комментарий ничего не добавляет к решению.
Диана
0

Переместите его в зону «Надежные сайты», добавив его в список «Надежные сайты» или локально. Это переместит его из зоны интрасети и не будет отображаться в Compat. Посмотреть.

Грег С.
источник
Ps Я знаю, что это работает, потому что это то, что мы делаем в моей компании для новых продуктов на основе браузера, которые не написаны с тегами X-UA, чтобы обеспечить рендеринг так, как они этого хотят.
Грег С.
Учитывая, что это, вероятно, настройка всей компании, ваш ответ должен быть применен к машине каждого пользователя, что вряд ли идеально.
MattD
0

Добавьте указанное ниже свойство в файл web.config для сайтов IIS. Это сработало для меня в моей интрасети в IE11.

<system.webServer>
  <httpProtocol>
    <customHeaders>
      <clear />
      <add name="X-UA-Compatible" value="IE=edge" />
    </customHeaders>
  </httpProtocol>
</system.webServer> 
user942620
источник
Пожалуйста, посмотрите мое обновление в билете, режим Enterprise и режим совместимости - это две разные вещи
Дорогой
0

Я решил эту проблему, перенаправив пользователя на полное доменное имя сервера, на котором размещена интрасеть.

IE, вероятно, использует худший в мире алгоритм для обнаружения сайтов "интрасети" ... действительно, указание server.domain.tld решает для меня проблему.

Да, вы прочитали это правильно, IE обнаруживает сайты интрасети не по частному IP-адресу, как это сделал бы любой разработчик, который слышал о TCP / IP, нет, по части URL-адреса "host", если у нее нет части домена, должен быть внутренним.

Страшно знать, что разработчики IE не понимают самых основных концепций TCP / IP.

Обратите внимание, что это было у БОЛЬШОГО корпоративного клиента, заставить его изменить GPO для вас - все равно что пытаться переместить Альпы на восток на 4 метра, но этого не произойдет.

карпия
источник
IE, вероятно, выполняет поиск в DNS и знает IP от этого. Поскольку это MS, он, вероятно, мог бы выполнять AD, но DNS имеет больше смысла.
smoore4 09
@SQLDBA отрицательный, если вы укажете IP, скажем, 10.0.0.1, хост НЕ определяется как сайт "интрасети" ... ничего общего с DNS, что вы имеете в виду с AD? Вы имеете в виду, что он подключается к AD и ищет там хост? Не имеет смысла, зачем ему это делать? С другой стороны, они являются Microsoft не просто так ™.
thecarpy
0

Как бы то ни было, у меня тоже была проблема в IE11:

  • Я не был в режиме предприятия.
  • Установлен флажок «Отображать сайты интрасети в режиме совместимости».
  • У меня были все настройки <!DOCTYPE html>и IE=Edge, упомянутые в вопросе
  • Мета-заголовок действительно был первым элементом в <head>элементе

Через некоторое время я узнал, что:

  • заголовок пользовательского агента, отправленный на сервер, был IE7, но ...
  • значение JavaScript было IE11!

Заголовок HTTP :

User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 10.0; WOW64; Trident/7.0; .NET4.0C; .NET4.0E) но

JavaScript :

window.navigator.userAgent === 'Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; .NET4.0C; .NET4.0E; rv:11.0) like Gecko'

Итак, я закончил проверку на стороне клиента.

А между тем, между тем, проверка пользовательского агента больше не рекомендуется. См. Https://developer.mozilla.org/en-US/docs/Web/HTTP/Browser_detection_using_the_user_agent (но это может быть хороший случай)

Янн Во
источник