Совместимость с X-UA не работает в IE 9 для сайтов интрасети

мы делаем сайт интрасети с asp.net mvc 5, но есть некоторые проблемы с настройкой совместимости в IE 9. Сайт должен отображаться без представления совместимости.
Мы провели небольшое исследование и сделали следующее:
1. Добавьте метаданные в layout.cshtml и login.cshtml.

<!DOCTYPE html>
<html>
<head>
    <title>@System.Web.Configuration.WebConfigurationManager.AppSettings["WebsiteTitle"]</title>
    <meta http-equiv='X-UA-Compatible' content='IE=Edge'>
    <meta http-equiv="PRAGMA" content="NO-CACHE">
    ....

@{Layout = null;}
@model ZdtcWebsite.Models.LoginModel
<!DOCTYPE html>
     <html>
     <head>
     <title>@System.Web.Configuration.WebConfigurationManager.AppSettings["WebsiteTitle"]</title>
     <meta http-equiv='X-UA-Compatible' content='IE=Edge'>
     <meta http-equiv="PRAGMA" content="NO-CACHE">
     <meta charset="utf-8" />
     ....

2. Добавляем customheader в web.config

<system.webServer>
<httpProtocol> 
        <customHeaders> 
          <clear />
          <add name="X-UA-Compatible" value="IE=Edge" /> 
        </customHeaders> 
     </httpProtocol> 
<validation validateIntegratedModeConfiguration="false" />
</system.webServer> 

Оба из этого все еще не работают. Наш сайт по-прежнему будет находиться в режиме совместимости при открытии. Одна вещь, которую я заметил, это то, что если мы открываем инструменты разработчика в IE9 и открываем страницу, тег X-UA-Compatible работает, но не работает, если инструменты разработчика закрыты.
Мы протестировали это в IE 11, и он работает нормально. . Кто-нибудь может подсказать, что здесь происходит?


person Daniel W    schedule 19.12.2014    source источник
comment
К вашему сведению, метатег ДОЛЖЕН быть первым тегом в теге Head, если у вас нет метатега типа содержимого, и в этом случае он должен стоять первым, а X-UA-Compatible должен быть вторым. Оно не может идти после заголовка, как вы сделали здесь. При использовании customHeaders вы также не должны использовать очистку. Это стирает другие заголовки, которые могут вам понадобиться.   -  person Erik Funkenbusch    schedule 20.12.2014
comment
Пытался переместить мету выше заголовка. Но все еще не работает. Мы добавили заголовок «очистить», потому что где-то читали, что в некоторых случаях существующий заголовок может испортить X-UA-Compatible. Но все равно не повезло   -  person Daniel W    schedule 20.12.2014
comment
Честно говоря, не уверен, почему вы не получаете ошибок. Мета кодировки ДОЛЖНА стоять на первом месте. См. code.google.com/p/doctype-mirror/wiki/MetaCharsetAttribute Я думаю, что вы можете непреднамеренно перевести свой документ в режим совместимости из-за этих ошибок.   -  person Erik Funkenbusch    schedule 20.12.2014
comment
Хм.. попробую еще раз проверить через пару дней. Попробую ваше предложение и свяжусь с вами по этому поводу   -  person Daniel W    schedule 20.12.2014


Ответы (2)


Оказывается, это потому, что у нас есть несколько «console.log» в нашем скрипте. Когда мы их удаляем, сайт работает нормально. Вероятно, это также является причиной того, что сайт работает нормально, если отображаются инструменты разработчика. Я не понимаю, почему есть какая-то связь между console.log и представлением совместимости, но я думаю, что есть

person Daniel W    schedule 22.12.2014
comment
У нас та же проблема, я попробую это - если это сработает, вы, сэр, спасли меня от нескольких дней тряски головой, и за это вы должны быть серьезно вознаграждены. - person tommed; 16.10.2015

Настройка браузера для режима совместимости переопределяет предпочтение документа (через метатег) или предпочтение сервера (через заголовок ответа). Параметр представления совместимости IE по умолчанию — использовать режим совместимости для сайтов интрасети. Перейдите в «Инструменты» > «Параметры просмотра в режиме совместимости» в IE. Там вы увидите флажок «Отображать сайты интрасети в режиме совместимости». Если он отмечен, снимите его. Если вы не можете снять флажок, потому что он отключен, вам придется поговорить с командой инфраструктуры вашей организации. Для этого есть настройка GP (групповая политика).

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

person Chris Pratt    schedule 19.12.2014
comment
Это не правда. Режим явного документа переопределяет неявные параметры представления совместимости для локальной интрасети (если только сайт не добавлен в белый список явным образом). Хотя я не уверен, что он переопределяет настройки режима предприятия, хотя это было только что представлено в IE11, поэтому здесь это не имеет значения. - person Erik Funkenbusch; 20.12.2014
comment
На самом деле это правда. Я могу подтвердить из первых рук, потому что наша организация обновилась до Windows 7 в прошлом году, и это разрушило все наши производственные площадки внутри, потому что все они переключились на представление совместимости. Политика GP наверняка переопределяет все. Теперь обычный потребительский экземпляр может быть другим. Признаюсь, прошло некоторое время с тех пор, как я это проверил. Но я точно знаю, что так было, по крайней мере, раньше, и я подозреваю, что IE позволит документу отменить пользовательские настройки. - person Chris Pratt; 20.12.2014
comment
Кроме того, я не уверен, о чем вы говорите, что было только что представлено в IE11. Наша команда по инфраструктуре развернула IE9 с представлением совместимости в GP, так что корпоративная поддержка существует по крайней мере с тех пор. - person Chris Pratt; 20.12.2014
comment
Это называется режим предприятия. msdn.microsoft.com/en-us/library/dn640687.aspx Да, режим документа имеет приоритет, потому что документ знает, как его нужно отображать, а общее правило — нет. Однако, как я уже сказал, если вы явно добавили домен в белый список, то это совсем другая история. Это также не имеет ничего общего с Windows 7, так как оно было представлено в IE8 для XP/Vista/7. Здесь есть дополнительная информация: frankcode.wordpress.com/2013/10/17/ - person Erik Funkenbusch; 20.12.2014
comment
Кроме того, похоже, существует ошибка, из-за которой представление совместимости с флагом совместимости с x-ua будет использовать правильный режим документа, но выдаст неверную строку пользовательского агента, что может привести к поломке веб-страниц, которые анализируют строку агента. - person Erik Funkenbusch; 20.12.2014
comment
у компании есть несколько устаревших сайтов интрасети, которым необходимо использовать режим совместимости. из-за этого невозможно отключить представление совместимости для всех сайтов интрасети. Я не совсем знаком с групповой политикой, но можно ли заставить одни сайты интрасети работать в совместимости, а другие нет? (Предполагая, что они принадлежат к одному и тому же домену) - person Daniel W; 20.12.2014
comment
Попробуйте добавить Знак Интернета (msdn.microsoft .com/en-us/ie/ms537628(v=vs.90).aspx) на веб-страницу, чтобы страница открывалась в зоне Интернета. Посмотрите, поможет ли это. (Я не уверен, но я полагаю, что какое-то время между IE8 и IE11 в поведении по умолчанию было изменение.) - person Lance Leonard; 20.12.2014