Неправильне значення X-UA-Сумісний для атрибута http-equiv для мета елемента


110

Я використав те саме, metaщо використовує котло HTML5, і валідатор HTML W3C скаржиться:

Неправильне значення X-UA-Сумісний для атрибута http-equiv для мета елемента.

<meta http-equiv='X-UA-Compatible' content='IE=edge,chrome=1'>

Що з цим metaтегом не так?


6
Ось приємний запис про це в блозі (це був і перший результат пошуку, який я отримав): blog.yjl.im/2011/01/…
ComFreek

Відповіді:


67

Або X-UA-сумісний не є "стандартним" HTML (стандарт "FSVO", який передбачає появу на публічно редагованій сторінці вікі, на яку посилається специфікація) або Validator не відповідає поточному статусу цієї вікі.

На момент написання (20130326) X-UA-Compatible з'являється на сторінці вікі в розділі, в якому зазначено: "Наступні запропоновані розширення ще не відповідають усім вимогам реєстрації в специфікації HTML, а тому ще не дозволені в дійсності документи ». Отже, валідатор правильно відхилити це значення.


8
Невірна сторінка вікі. Той, на кого ви посилаєтесь, призначений <meta name= .... Для <meta http-equiv=...сторінки є wiki.whatwg.org/wiki/PragmaExtensions
Alohci

6
Правильна сторінка Вікі містить X-UA-Compatible, тому застосовується альтернатива "Валідатор не оновлений". Навіть validator.nu (який, як було сказано, в цілому більш сучасний), є застарілим у цьому відношенні.
Юкка К. Корпела

Дякуємо за виправлення. Я не розумів, що значення мета-атрибутів розділено на дві сторінки.
Квентін

1
Дивіться мою відповідь на прикладі того, як виправити валідатор для підтримки X-UA-Compatible. stackoverflow.com/a/21048010/1006963
darcyparker

так як я можу виправити проблему з w3c validator..може я видалити тег?
Кріш

42

Якщо ви хочете зробити технічно дійсним (всі люблять бачити зелений фавікон) без будь-яких функціональних можливостей, ви повинні мати можливість просто загорнути його в тег "якщо IE".

<!--[if IE]><meta http-equiv='X-UA-Compatible' content='IE=edge,chrome=1'><![endif]-->

22
Це ефективно вимикає підтримку Chrome Frame, оскільки Chrome Frame ігнорує умовні коментарі до IE, див. Jeffreybarke.net/2010/08/…
Jasper Moelker

5
@JasperMoelker: напевно, варто згадати, що стаття, на яку ви надали посилання, насправді містить вирішення для Chrome Frame, а також це фантастично: перевірка + підтримка Chrome Frame!
Лука

5
Ні, ні ні, це порушує X-UA-сумісність. xn--mlform-iua.no/blog/…
brentonstrine

30

Одне з можливих рішень - це застосувати виправлену сторону сервера у заголовку, як це запропоновано в цій хорошій написанні Аарон Лейтон. (Вся заслуга повинна бути йому, і я перефразую, а не плагіат ...)

<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />

"Коли Internet Explorer натрапить на цей рядок, він змінить двигун, який використовується спочатку Chrome Frame, якщо встановлений плагін, а потім на Edge (найвищий підтримуваний режим документа в браузері)."

Кроки :

  • Виправлення перевірки сторінки - це досягається простим видаленням тегу
  • Швидкість візуалізації - Замість того, щоб чекати, коли браузер побачить тег, а потім змінить режими, ми надішлемо правильний режим вперед в якості заголовка відповіді
  • Переконайтеся, що ми показуємо лише виправлення для Internet Explorer - ми просто використовуватимемо деяке виявлення браузера на стороні сервера та лише надішлемо його до IE

Щоб додати заголовок у PHP, ми можемо просто додати це на нашу сторінку:

if (isset($_SERVER['HTTP_USER_AGENT']) &&
    (strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE') !== false))
        header('X-UA-Compatible: IE=edge,chrome=1');


Або ви можете додати його у файл .htaccess так:

<FilesMatch "\.(htm|html|php)$">
    <IfModule mod_headers.c>
        BrowserMatch MSIE ie
        Header set X-UA-Compatible "IE=Edge,chrome=1" env=ie
    </IfModule>
</FilesMatch>


Посилання на оригінальну статтю, перевірте коментарі щодо можливих застережень. Також включає в себе реалізацію для C #.

Виправити неправильне значення X-UA-Сумісний раз і назавжди

Сподіваюся, це допомагає!


1
На момент написання цього рішення це рішення реалізовано у файлі HTML5BP .htaccess. Отже, за умови, що на вашому сервері Apache увімкнено mod_headers, ви можете безпечно видалити <meta>файл із html-файлу.
Патрік Джеймс МакДугл

Якщо ви використовуєте Spring MVC, як я, це зробити все ще досить просто. Ви шукаєте:, response.addHeader("X-UA-Compatible", "IE=edge,chrome=1");але ось повна суть github .
Пол Нельсон Бейкер

1
@PatrickJamesMcDougle Мені довелося включити і модні, headersі setenvifмої сервери Apache, щоб змусити це працювати.
iglvzx

Чи має значення, куди це додано? Це повинно бути найперше?
Залишайтеся

1
Тут підтримується W3C HTML-валідатор. Якщо ви додасте "chrome = 1" у значення, рішення в цій відповіді більше не працюватиме, тому що ми з тих пір додали чек і для заголовка (разом із перевіркою мета-елемента), і на специфікацію HTML в будь-якому місці (металемент або заголовок), єдине дозволене значення - "IE = Edge".
sidehowbarker


2

.. може це хороша відповідь?

Встановіть HTTP-заголовок за допомогою PHP:

Це не моя власна робота, але я сподіваюся, що вона буде корисною і для інших.


7
Зауважте, що відповіді, що стосуються лише посилань, не рекомендують (з часом посилання стають несвіжими) Будь ласка, порекомендуйте відредагувати свою відповідь та додати сюди конспект.
буммі

1

Якщо ви завантажуєте / створюєте код валідатора src, ви можете додати підтримку самостійно.

Додайте наступне до такого файлу, як html5-meta-X-UA-Compatible.rnc). Потім додайте його html5full.rnc.

Я це зробив, і це добре працює для перевірки.

meta.http-equiv.X-UA-Compatible.elem =
  element meta { meta.inner & meta.http-equiv.X-UA-Compatible.attrs }
  meta.http-equiv.X-UA-Compatible.attrs =
    ( common.attrs.basic
      & common.attrs.i18n
      & common.attrs.present
      & common.attrs.other
      & meta.http-equiv.attrs.http-equiv.X-UA-Compatible
      & meta.http-equiv.attrs.content.X-UA-Compatible
      & ( common.attrs.aria.role.presentation
        | common.attrs.aria.role.menuitem
        )?
    )
    meta.http-equiv.attrs.http-equiv.X-UA-Compatible = attribute http-equiv {
      xsd:string {
        pattern = "X-UA-Compatible"
      }
    }
    meta.http-equiv.attrs.content.X-UA-Compatible = attribute content {
      xsd:string {
        pattern = "IE=((edge)|(EmulateIE(7|8|9|10))|7|8|9|10|11)(,chrome=(1|0))?"
      }
    }

common.elem.metadata |= meta.http-equiv.X-UA-Compatible.elem

0

Видаліть ,chrome=1з метатега, він буде добре працювати. З валідатором:

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

-1

У мене був той самий випуск, який додав та оточив цілу лінію, щоб виправити ситуацію.

<!--[if IE]><meta http-equiv="x-ua-compatible" content="IE=9" /><![endif]-->

1
Хтось знає, чому це заперечує? Це фактично змушує валідатор працювати належним чином.
Мацей Папроцький

2
Можливо, тому, що насправді нічого не досягає. 1. Умовні коментарі не працюють в IE10 і вище. 2. X-UA-сумісний призначений для того, щоб нові браузери наслідували старіші. Отже, що ефективно говорить цей рядок: 1. IE 10 та 11, візуалізуйте в режимі за замовчуванням (оскільки вони вже не розбирають умовних коментарів) 2. IE 9, надайте як IE 9 (тобто, його режим за замовчуванням у більшості випадків). 3. IE <9, візуалізуйте в режимі за замовчуванням (оскільки вони не можуть імітувати браузер, який є більш новим, ніж вони є)
aleayr

Я також додам, що він змушує валідатор працювати «належним чином», оскільки він знаходиться всередині коментаря (таким чином валідатор це ігнорує).
алеайр
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.