За замовчуванням IE8 змушує веб-сайти внутрішньої мережі перейти в режим сумісності. Я спробував змінити мета-заголовок на IE8, але він не підтверджує мета-заголовок і просто використовує налаштування браузера. Хтось знає, як це відключити?
За замовчуванням IE8 змушує веб-сайти внутрішньої мережі перейти в режим сумісності. Я спробував змінити мета-заголовок на IE8, але він не підтверджує мета-заголовок і просто використовує налаштування браузера. Хтось знає, як це відключити?
Відповіді:
Можна змінити режим сумісності в інтранеті.
Для IIS просто додайте наведений нижче код до web.config. Працював для мене з IE9.
<system.webServer>
<httpProtocol>
<customHeaders>
<clear />
<add name="X-UA-Compatible" value="IE=edge" />
</customHeaders>
</httpProtocol>
</system.webServer>
Еквівалент для Apache:
Header set X-UA-Compatible: IE=Edge
А для nginx:
add_header "X-UA-Compatible" "IE=Edge";
А для express.js:
res.set('X-UA-Compatible', 'IE=Edge')
Майкл Ірігойен правильний, Але трохи складніше ...
якщо ви використовуєте чудову котельну панель Пола Ірландського, у вас буде щось таке:
<!doctype html>
<!--[if lt IE 7]> <html class="no-js ie6 oldie" lang="en"> <![endif]-->
<!--[if IE 7]> <html class="no-js ie7 oldie" lang="en"> <![endif]-->
<!--[if IE 8]> <html class="no-js ie8 oldie" lang="en"> <![endif]-->
<!--[if gt IE 8]><!--> <html class="no-js" lang="en"> <!--<![endif]-->
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
Це НЕ буде працювати, як очікувалося, і примусить IE перейти в режим сумісності в інтранетному середовищі, якщо у вас встановлено прапорець "Відображати сайти інтрамережі у вигляді сумісності". Вам потрібно видалити умовні коментарі IE, щоб запобігти режиму сумісності Інтранету.
Отже, працює наступний код:
<!doctype html>
<html class="no-js" lang="en">
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
В основному, якщо ви запускаєте умовні коментарі IE перед <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
оператором, тоді ви будете змушені переходити в режим сумісності в інтранет- середовищі, якщо ви працюєте з IE9 з налаштуваннями за замовчуванням.
ОНОВЛЕННЯ - ДОПОМОГА. ІНФОРМАЦІЯ. Але зауважте, що існує хитрість, яка змусить роботу робочої панелі HTML5:
Додайте порожній, умовний коментар перед ДОКТОМ. І зауважте , як добре, що коли ви робите що , то ви можете також додати умовні коментарі навколо X-UA-Compatible
директиви, роблячи сторінку HTML5-дійсним , а також. Так, наприклад:
<!--[if HTML5]><![endif]-->
<!doctype html>
<!--[if the boilerplate conditionals goes here<![endif]-->
<head>
<!--[if !HTML5]>
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<![endif]-->
Повідомлення в блозі, яке було натхнене першою частиною цієї відповіді , має більш детальну інформацію. І до речі: Як вже згадувалося в цьому блозі, можна також замінити умовний коментар перед DOCTYPE з підлозі умовним коментарем з НЕ в змозі : <!--[]-->
. Таким чином, так:
<!--[]-->
<!doctype html>
<!--[if the boilerplate conditionals goes here<![endif]-->
<head>
<!--[if !HTML5]>
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<![endif]-->
Але зауважте, що останній варіант ( <--[]--><!DOCTYPE html>
), як пояснюється, наприклад, у цій відповіді на інше питання , активізує добре відому проблему, що вона - для застарілих версій IE без підтримки для X-UA-Compatioble
(читайте: для IE7 та IE6) - приведе браузер у quirks-режим.
Якщо ви випустите меню "Інструменти" і виберіть "Налаштування перегляду сумісності", у цьому діалоговому вікні внизу встановлено налаштування "Відображення сайтів інтрамережі в режимі сумісності". Якщо ви знімете цей прапорець, це повинно вирішити проблему, і IE використовуватиме режим, заснований на DOCTYPE.
У відповідях на це запитання існує певна сум'яття.
Верхня відповідь на даний момент - це серверне рішення, яке встановлює прапор у заголовку http, а деякі коментарі свідчать про те, що рішення з використанням метатега просто не працює.
Я думаю, що цей запис у блозі дає хороший огляд використання мета-інформації про сумісність, і, на моєму досвіді, працює так, як описано: http://blogs.msdn.com/b/cjacks/archive/2012/02/29/using-x- ua-сумісний для створення-довговічний-підприємство-web-applications.aspx
Основні моменти:
Одним важливим моментом (і я думаю, що з цього моменту виникає багато плутанини) є те, що IE має два "класи" режимів:
Режим документа визначає механізм візуалізації (як відображається веб-сторінка).
Режим браузера визначає, який IE рядок User-Agent (UA) надсилає серверам, яким IE режиму документа за замовчуванням та як IE оцінює умовні коментарі.
Більше про інформацію про режим документа та режим браузера можна знайти у цій статті: http://blogs.msdn.com/b/ie/archive/2010/06/16/ie-s-compatibility-features-for- site-developers.aspx? Перенаправлено = вірно
На мій досвід, метадані сумісності впливатимуть лише на режим документа . Тож якщо ви покладаєтесь на виявлення браузера, це вам не допоможе. Але якщо ви використовуєте функцію виявлення функцій, це повинен бути шлях.
Тому я рекомендую використовувати метатег (на сторінці html), використовуючи цей синтаксис:
<meta http-equiv="X-UA-Compatible" content="IE=9,10" ></meta>
Примітка. Наведіть список режимів браузера, на які ви протестовані.
Повідомлення в блозі також надає рекомендації щодо використання EmulateIEX. Ось цитата:
Зважаючи на це, одне, що мені здається дивним, - це коли програма запитує EmulateIE7 або EmulateIE8. Ці режими емуляції самі є рішеннями. Отже, замість того, щоб конкретизувати те, що ви хочете, ви запитаєте одну з двох речей, а потім визначаєте, яку з цих двох речей, шукаючи в іншому місці коду для ДОКТИПУ (а потім намагаєтесь зрозуміти, чи дасть вам цей ДОКТИП стандартів або химерність залежно від її змісту - ще одне, часом заплутане завдання). Замість того, щоб зробити це, я думаю, що має сенс значно більше сенсу безпосередньо вказувати, що ви хочете, а не давати відповідь, яка сама по собі є питанням. Якщо ви хочете стандартів IE7, тоді використовуйте IE = 7, а не IE = EmulateIE7. (Зверніть увагу, що це не означає, що ви не повинні використовувати DOCTYPE - слід.)
Спробуйте цей метатег:
<meta http-equiv="X-UA-Compatible" content="IE=8" />
Це повинно змусити IE8 відобразити як стандартний режим IE8, навіть якщо встановлено прапорець "Відображати сайти інтрамережі в режимі сумісності" [або для інтранет, або для всіх веб-сайтів], я спробував це самостійно на IE 8.0.6
Наш системний адміністратор вирішив цю проблему, знявши прапорець для цієї організації глобально. Користувачам навіть не потрібно було виходити з системи.
Я знайшов робочу відповідь, яка дозволяє перекрити перевірений Інтранет Перегляд сумісності. Просто додайте в події OnInit на своїй сторінці цей рядок (не потрібно ні мета, ні web.config customHeader):
Response.AddHeader("X-UA-Compatible", "IE=EmulateIE8");
Спробуйте помістити в заголовок таке:
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
Люб’язно надано Полом Ірландським HTML5 Boilerplate (але він працює і в XHTML Transitional).
Мені вдалося змінити режим сумісності, вказавши метатег як ПЕРШУ ТАКУ в розділі заголовка, а не лише перший метатег, але як і ДУЖЕ ПЕРШУ .
Дякуємо @ stefan.s за те, що він поставив мене до цього у вашій чудовій відповіді. Перед читанням у мене було:
ЦЕ НЕ РОБОТИ
<head>
<link rel="stylesheet" type="text/css" href="https://stackoverflow.com/qmuat/plugins/editors/jckeditor/typography/typography.php"/>
<meta http-equiv="x-ua-compatible" content="IE=9" >
перемістив тег посилання з шляху, і він працював
ЦІ РОБОТИ :
<head><meta http-equiv="x-ua-compatible" content="IE=9" >
Таким чином, клієнт IE8, призначений для використання сумісності, відображає сторінку як стандартний режим IE8 - content = 'IE = 9' означає використовувати найвищий стандарт, доступний до IE9 і включаючи його.
Це не зовсім рішення, але я вважаю, що це найкраще. На наших інтранетних сайтах ми говоримо людям, що доступ до них може здійснюватися лише Firefox, ми не приймаємо люб'язних користувачів IE тут. Перевірте агент користувача на стороні сервера або клієнта і забороніть їм доступ з IE. І я .NET програміст.
Я боровся з цим питанням і хотів допомогти забезпечити унікальне рішення та розуміння.
Деякі рамки на базі AJAX вводять javascripts та таблиці стилів на початку <head>
та, мабуть, це заважає нормально працювати налагодженому мета-тегу. У цьому випадку я виявив, що безпосередньо введення в заголовок відповіді HTTP, як і відповідь Андраса Сесі, вирішить проблему.
Для тих, хто використовує сервлети Java, хороший спосіб вирішити це - використовувати ServletFilter.
public class EmulateFilter implements Filter {
@Override
public void destroy() {
}
@Override
public void doFilter(ServletRequest arg0, ServletResponse arg1,
FilterChain arg2) throws IOException, ServletException {
HttpServletResponse response = ((HttpServletResponse)arg1);
response.addHeader("X-UA-Compatible", "IE=8");
arg2.doFilter(arg0, arg1);
}
@Override
public void init(FilterConfig arg0) throws ServletException {
}
}
Ми можемо вирішити цю проблему у середовищі Spring-Apache-tomcat, додавши один рядок у методі RequestInterceptor -
//before the actual handler will be executed
public boolean preHandle(HttpServletRequest request,
HttpServletResponse response, Object handler)
throws Exception {
// Some logic
// below statement ensures IE trusts the page formatting and will render it acc. to IE 8 standard.
response.addHeader("X-UA-Compatible", "IE=8");
return true;
}
Довідка з - Як створити фільтр та змінити заголовок відповіді. Він розкриває, як ми можемо вирішити цю проблему за допомогою RequestInterceptor (Spring).
Якщо ви хочете, щоб ваш веб-сайт запровадив стандартний режим IE 8, тоді використовуйте цей метатег разом із дійсним DOCTYPE:
<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE8" />
Зверніть увагу на значення "EmulateIE8", а не просте "IE8".
На думку розробників IE, це повинно: "Відображення DOCTYPE стандартів у режимі стандартів IE8; Відображення примірників DOCTYPE в режимі Quirks. Використовуйте цей тег, щоб перекрити подання сумісності на клієнтських машинах та змусити стандарти до стандартів IE8."
Докладніше про це повідомлення в блозі IE: http://blogs.msdn.com/b/ie/archive/2008/08/27/introducing-compatibility-view.aspx
Це запитання є дублікатом режиму браузера «Internet Explorer 8» в інтранеті .
Відповіді там свідчать, що неможливо відключити представлення сумісності (на стороні сервера) - https://stackoverflow.com/a/4130343/24267 . Це, звичайно, так і є, тому що жодна пропозиція, яку я спробував, не спрацювала. В IE8 "Режим браузера" встановлюється на перегляд сумісності Internet Explorer 8 незалежно від того, який заголовок X-UA-сумісного ви надсилаєте.
Мені довелося виконати спеціальну обробку для IE7 та режиму сумісності, через що браузер відобразив за допомогою IE8, але повідомив, що це IE7, зламав мій код. Ось як я виправив свій код (я знаю, що це жахливий злом, і я повинен перевіряти функції, а не версії браузера):
isIE8 = navigator.appVersion.indexOf ("MSIE")! = -1 && parseFloat (navigator.appVersion.split ("MSIE") [1]) == 8; if (! isIE8 && navigator.appVersion.indexOf ("MSIE")! = -1 && parseFloat (navigator.appVersion.split ("MSIE") [1]) == 7 && navigator.appVersion.indexOf ("Тризуб") ! = -1) { // Брехун, це IE8 в режимі сумісності. isIE8 = вірно; }
Додайте це всередині заголовка тегів (орієнтуючись на потрібну версію IE):
<meta http-equiv="X-UA-Compatible" content="IE=8" />
Зауважте, це НЕ змінить того факту, що браузер говорить про це в режимі сумісності (називається режимом браузера), але сторінка буде відображатися в стандартному режимі IE8. Якщо його НІКОЛИ не відображається, як ви хочете, це, ймовірно, тому, що у вас є JavaScript, який помилково перевіряє версію IE. Перегляньте наступне повідомлення в блозі, щоб визначити, яку властивість слід відключити, оскільки навіть якщо ви встановите мета-X-UA-сумісний тег, рядок агента користувача все одно буде говорити MSIE 7.0 .
У моєму випадку для виправлення мені довелося додати перевірку на режим сумісності IE7. Я зробив це за допомогою простого коду javascript:
//IE8 and later will have the word 'trident' in its user agent string.
if (navigator.userAgent.indexOf("Trident")>-1) { //do something }
Для всіх, хто читає це, щоб відключити це через GPO для всіх користувачів, це налаштування:
Конфігурація комп'ютера / Адміністративні шаблони / Компоненти Windows / Internet Explorer / Перегляд сумісності / Увімкнення режиму стандартів Internet Explorer для локальної інтранетичної мережі
хоча редагування web.config виправило це для мене.
Змінення заголовків у .htaccess
BrowserMatch MSIE ie
Header set X-UA-Compatible "IE=Edge,chrome=1" env=ie
Знайшов рішення цієї проблеми тут: https://github.com/h5bp/html5-boilerplate/isissue/378
Коментар Стефана S щодо режиму документування та режиму браузера був дуже актуальним для моєї проблеми.
У мене є метадані X-UA-Content на сторінці, але я перевіряв версію браузера на стороні клієнта navigator.appVersion
. Цей тест не відображає метадані, оскільки він надає режиму браузера не режиму документа.
Відповіддю для мене було тестувати document.documentMode
щось на кшталт:
function IsIE(n)
{
if (navigator.appVersion.indexOf("MSIE ") == -1) return false;
var sDocMode = document.documentMode;
return (isFinite(sDocMode) && sDocMode==n);
}
Тепер мій тег мета-X-UA-вміст відображається в моєму тесті браузера.
Чому я роблю таку нахмурену річ, як тестування браузера? Швидкість. Різні мої додатки jQuery, як-от tableorter, надто повільні в IE6 / 7, і я хочу їх вимкнути. Я не впевнений, що тестування функцій браузера може допомогти мені вирішити це інакше.