Работает ли заголовок X-UA, совместимый с http, на самом деле для IE9? - PullRequest
5 голосов
/ 20 марта 2012

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

Я тестирую эту HTML-страницу:

<!DOCTYPE HTML>

<html>
    <head>
        <meta http-equiv="X-UA-Compatible" content="IE=9" />
        <title>Company</title>
    </head>
    <body>
    </body>
</html>

Я поместил это в конфигурации IIS:

<system.webServer>
    <httpProtocol>
        <customHeaders>
            <clear />
            <add name="X-UA-Compatible" value="IE=edge" />
        </customHeaders>
    </httpProtocol>

, как рекомендовано здесь: https://stackoverflow.com/a/5887546,, и проверил заголовки ответа в IE9 и посмотрите:

X-UA-Compatible     IE=Edge

Но страница все еще переводит браузер в режим просмотра в режиме совместимости.

Консоль показывает:

HTML1202: http://intranet-site/test.html is running in Compatibility View because 'Display intranet sites in Compatibility View' is checked. 
test.html

Здесь есть похожий вопрос: https://stackoverflow.com/a/3726605/1279516,в котором комментарий Джейкоба к выбранному ответу предполагает, что в IE9 вы ничего не можете сделать, чтобы переопределить параметр «Отображать сайты интрасети в представлении совместимости».Тем не менее, его комментарий - единственное место, где я нашел упоминание об этом.Кто-нибудь может подтвердить или опровергнуть это утверждение?

И могу ли я попробовать еще что-нибудь?Мне не нужно сообщать всем клиентам, которые развертывают наш продукт, чтобы отключить настройку браузера «Показывать сайты интрасети в представлении совместимости» для всех своих пользователей.

Ответы [ 2 ]

2 голосов
/ 21 марта 2012

Если кто-то не скажет иначе, комментарий oryol предполагает, что все функции становятся доступными в зависимости от режима документа, поэтому нет необходимости пытаться управлять режимом браузера дальше, когда вы получаете нужный режим документа.

0 голосов
/ 25 ноября 2014

Я столкнулся с подобной проблемой - страница неправильно отображается в IE8 / 9, поскольку Отображение сайтов интрасети в режиме совместимости было включено. Просить всех пользователей отключить это или запрашивать групповую политику и добавлять исключения, потому что я не знаю, сколько других страниц интрасети, требующих этого, не было вариантом. Режим документа в порядке благодаря X-UA-Compatible: IE=edge. Но у меня все еще были проблемы с макетом.

Причина: В режиме совместимости IE отправляет на сервер другого агента пользователя. Для IE8,9 это IE7. Некоторые из моих библиотек ASP.NET выполняют некоторые проверки на основе этого и визуализируют специфичный для IE7 HTML / CSS, что приводит к проблемам с макетом.

Решение: Измените строку UserAgent на сервере на «IE9», если она говорит «IE7». Конечно, это грязное решение, поскольку теоретически может существовать настоящий клиент IE7. В моем случае (Интранет) я знаю, что мои пользователи имеют только IE> = 8. Изменить UserAgent оказалось сложнее, чем предполагалось. Я успешно применил эту идею - получение подкласса из HttpWorkerRequest и перехват запросов для UserAgent . Это косвенно перегружает request.UserAgent и помогает решить проблему.

...