Для X-UA-Compatible задано значение IE=edge, но оно по-прежнему не останавливает режим совместимости
Я довольно смущен. Я должен быть в состоянии установить
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
и IE8 и IE9 должны визуализировать страницу с использованием новейшего движка рендеринга. Тем не менее, я только что проверил его, и если режим совместимости включен в другом месте на нашем сайте, он останется на нашей странице, даже если мы должны заставить его не делать этого.
Как вы должны убедиться, что IE не использует режим совместимости (даже в интрасети)?
FWIW, я использую декларацию HTML5 DocType (<!doctype html>
).
Вот первые несколько строчек страницы:
<!doctype html>
<!--[if lt IE 7 ]> <html lang="en" class="innerpage no-js ie6"> <![endif]-->
<!--[if IE 7 ]> <html lang="en" class="innerpage no-js ie7"> <![endif]-->
<!--[if IE 8 ]> <html lang="en" class="innerpage no-js ie8"> <![endif]-->
<!--[if (gte IE 9)|!(IE)]><!-->
<html lang="en" class="innerpage no-js">
<!--<![endif]-->
<head>
<meta charset="ISO-8859-1" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
РЕДАКТИРОВАТЬ: я только что узнал, что по умолчанию в IE8 используется режим совместимости IE7 для сайтов интрасети. Будет ли это переопределять метатег X-UA-Compatible?
18 ответов
Если вам необходимо переопределить параметры просмотра совместимости IE для сайтов интрасети, вы можете сделать это в файле web.config (IIS7) или через пользовательские заголовки HTTP в свойствах веб-сайта (IIS6) и установить X-UA-Compatible там. Мета-тег не переопределяет настройки внутренней сети IE в настройках представления совместимости, но если вы установите его на хост-сервере, он переопределит совместимость.
Пример для web.config в IIS7:
<system.webServer>
<httpProtocol>
<customHeaders>
<add name="X-UA-Compatible" value="IE=EmulateIE8" />
</customHeaders>
</httpProtocol>
</system.webServer>
Изменить: я удалил clear
код непосредственно перед add
; это было ненужное упущение при копировании и вставке. Хороший улов, комментаторы!
Решение на стороне сервера является рекомендуемым, как предложил @TimmyFranks в своем ответе, но если нужно реализовать X-UA-Compatible
Правило на уровне страницы, пожалуйста, прочитайте следующие советы, чтобы воспользоваться опытом того, кто уже сгорел
X-UA-Compatible
метатег должен появляться сразу после заголовка в <head>
элемент. Никакие другие метатеги, ссылки на css и вызовы js-скриптов не могут быть помещены перед ним.
<head>
<title>Site Title</title>
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta charset="utf-8">
<script type="text/javascript" src="/jsFile.js"></script>
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<link rel="apple-touch-icon" href="/apple-touch-icon.png" />
<link rel="shortcut icon" href="/apple-touch-icon.png" />
</head>
Если на странице есть какие-либо условные комментарии (скажем, расположены в <html>
), они должны быть помещены под, после <head>
,
// DON'T: place class inside the HTML tag
<!--[if gt IE 8]><!-->
<html class="aboveIe8">
<!--<![endif]-->
// DO: place the class inside the BODY tag
<!--[if gt IE 8]><!-->
<body class="aboveIe8">
<!--<![endif]-->
Команда Html5BoilerPlate написала об этой ошибке - http://h5bp.com/i/378 У них есть несколько решений.
Что касается представления "Интранет и совместимость", то при настройке инструментов> Параметры представления "Совместимость" имеются настройки.
Обратите внимание, что если вы обслуживаете его из PHP, вы можете использовать следующий код, чтобы исправить это.
header("X-UA-Compatible: IE=Edge");
Оказывается, это связано с "умным" выбором Microsoft, который заставляет все сайты интрасети переходить в режим совместимости, даже если X-UA-Compatible
установлен в IE=edge
,
Я также получил ту же проблему рендеринга IE9 в стандартах IE7 Document для локального хоста. Я перепробовал много условных комментариев, но безуспешно. В конце я просто удалил все условные теги и сразу же добавил метатег после заголовка, как показано ниже, и это сработало как шарм.
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
Надеюсь, поможет
Даже если вы сняли флажок "Показывать сайты интрасети в представлении совместимости" и в заголовках ответов указали X-UA-Compatible, есть еще одна причина, по которой ваш браузер может по умолчанию использовать "Представление совместимости" в любом случае - групповая политика. Посмотрите на вашей консоли следующее сообщение:
HTML1203: xxx.xxx настроен для работы в представлении совместимости через групповую политику.
Где xxx.xxx - это домен вашего сайта (например, test.com). Если вы видите это, то групповая политика для вашего домена устанавливается так, что любой сайт, заканчивающийся на test.com, будет автоматически отображаться в режиме совместимости независимо от типа документа, заголовков и т. Д.
Для получения дополнительной информации, пожалуйста, смотрите следующую ссылку (объясняет HTML-коды): http://msdn.microsoft.com/en-us/library/ie/hh180764(v=vs.85).aspx
Как указывает NEOSWF выше, условные комментарии Paul Irish прекращают действие метатега.
Здесь есть несколько исправлений ( http://nicolasgallagher.com/better-conditional-classnames-for-hack-free-css/)
Они включают:
Добавление двух классов HTML, использование заголовков сервера и добавление условного комментария над типом документа.
В моем последнем проекте я решил удалить условные комментарии Пола Ирландского. Мне не понравилась идея добавить что-либо до html, не выполняя МНОГО тестов в первую очередь, и приятно видеть, что было установлено, просто взглянув на HTML.
В конце я окружил div сразу после тела и использовал условные комментарии, например
<!--[if IE 7]><div class="ie7"><!--<![endif]-->
... regular body stuff
<!--[if IE 7]></div><!--<![endif]-->
Я мог бы сделать это по всему телу, но это сложнее с CMS, такими как Wordpress.
Очевидно, это еще один DIV внутри разметки, но только для старых браузеров.
Я думаю, что это может быть решение для каждого проекта, хотя.
Я также прочитал кое-что о метатеге charset, который должен быть в первых 1024 байтах, так что это гарантирует.
Иногда самые простые и легкие для чтения идеи являются лучшими, и об этом определенно стоит подумать! Спасибо за 6-й комментарий по ссылке выше за указание на это.
Я добавил следующее в мой файл htaccess, что и помогло:
BrowserMatch MSIE ie
Header set X-UA-Compatible "IE=Edge,chrome=1" env=ie
X-UA-Compatible
будет переопределять только режим документа, но не режим браузера, и не будет работать для всех сайтов интрасети; в этом случае лучше всего отключить "Отображать сайты интрасети в представлении совместимости" и установить параметр групповой политики, чтобы указать, каким сайтам интрасети требуется режим совместимости.
Кроме того, X-UA-Compatible должен быть первым метатегом в разделе head
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
</head>
Кстати, правильный порядок или основные заголовки тегов таковы:
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta charset="utf-8">
<title>Site Title</title>
<!-- other tags -->
</head>
Сюда
- мы устанавливаем механизм рендеринга для использования до того, как IExplorer начинает обрабатывать
- документ затем мы устанавливаем кодировку для использования для всех браузеров
- затем мы печатаем заголовок, который будет обработан с уже определенной кодировкой.
Для Nginx,
add_header "X-UA-Compatible" "IE=Edge,chrome=1";
ссылка: https://github.com/h5bp/server-configs/commit/a5b0a8f736d68f7de27cdcb202e32975a74bd2c5
Тимми Фрэнкс был прав для меня. Сегодня у нас возникла проблема, когда у клиента был IE8 по всей компании, и он переводил сайт, который мы написали для своей интрасети, в режим совместимости. Настройка "IE-Edge", кажется, это исправить.
<httpProtocol>
<customHeaders>
<clear />
<add name="X-UA-Compatible" value="IE=Edge" />
</customHeaders>
</httpProtocol>
Я испытывал ту же проблему в IE11. Ни один из этих ответов не решил мою проблему. Немного покопавшись, я заметил, что браузер работает в режиме Enterprise. (подтвердите, нажав F12 и перейдите на вкладку эмуляции, найдите выпадающий профиль браузера). Параметр заблокирован, и я не могу его изменить.
Мне удалось изменить профиль на рабочий стол после удаления CurrentVersion из следующего раздела реестра:
HKEY_CURRENT_USER\Software\Policies\Microsoft\Internet Explorer\Main\EnterpriseMode
После изменения режима на рабочий стол ответы на этот пост будут работать.
Когда ваш браузер открывается с режимами совместимости, даже если вы удалите и отключите все настройки режимов совместимости из своего веб-браузера и редактора локальной групповой политики, вы можете попытаться отключить ключ регистрации.
Это также происходит со мной при использовании домена и субдомена для подключения на стороне сервера. Машина ограничена для открытия в режиме совместимости для всех поддоменов.
ОТКЛЮЧИТЬ РЕЖИМ СОВМЕСТИМОСТИ ДЛЯ ИНТРАНЕТА
HKEY_LOCAL_MACHINE - ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ - Политики - Microsoft - Internet Explorer - BrowserEmulation -> IntranetCompalityMode Значение должно быть 0 (ноль). А также удалите существующее доменное имя из PolicyList.
В противном случае вы можете добавить новое значение (DWORD), которое содержит 0 (ноль) данных значения.
Мне удалось обойти эту загрузку заголовков до HTML с помощью php, и это сработало очень хорошо.
<?php
header( 'X-UA-Compatible: IE=edge,chrome=1' );
header( 'content: width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no' );
include('ix.html');
?>
ix.html - это контент, который я хотел загрузить после отправки заголовков.
IE 11 больше не позволяет вам переопределять настройки представления совместимости браузера, отправляя заголовок...
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
Похоже, что единственный способ заставить браузер не использовать представление совместимости - это отключить его в своем браузере. Наш сайт - Интранет, и IE по умолчанию использует представление совместимости для сайтов Интранет. Какая боль!
Мы смогли предотвратить необходимость изменения пользователем настроек браузера для пользователей IE 9 и 10, но он больше не работает в IE 11. Наши пользователи IE переходят на Chrome, где это не проблема, и никогда не было было.
У меня была та же проблема после попытки много комбинации у меня было это рабочее примечание у меня проверена совместимость для интрасети
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<head runat="server">
Если вы используете стек LAMP, добавьте его в файл.htaccess в корневой веб-папке. Нет необходимости добавлять его в каждый файл PHP.
<IfModule mod_headers.c>
Header add X-UA-Compatible "IE=Edge"
</IfModule>