Valore non valido X-UA-Compatible per l'attributo http-equiv sul meta dell'elemento


110

Ho usato lo stesso metache utilizza HTML5 Boilerplate e il validatore HTML W3C si lamenta:

Valore non valido X-UA-Compatible per l'attributo http-equiv sul meta dell'elemento.

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

Cosa c'è di sbagliato in questo metatag?


6
Ecco un bel post sul blog a riguardo (era anche il primo risultato di ricerca che ho ottenuto): blog.yjl.im/2011/01/…
ComFreek

Risposte:


67

O X-UA-Compatible non è HTML "standard" ("standard" USAV che implica l'apparizione su una pagina wiki modificabile pubblicamente a cui fa riferimento la specifica) o il Validator non è aggiornato con lo stato corrente di quel wiki.

Al momento della stesura di (20130326) X-UA-Compatible appare sulla pagina wiki sotto una sezione che afferma: "Le seguenti estensioni proposte non sono ancora conformi a tutti i requisiti di registrazione nelle specifiche HTML e pertanto non sono ancora consentite come valide documenti." Quindi il validatore ha ragione nel rifiutare questo valore.


8
Pagina wiki sbagliata. Quello a cui ti colleghi è per <meta name= .... Per <meta http-equiv=...la pagina è wiki.whatwg.org/wiki/PragmaExtensions
Alohci

6
La pagina wiki corretta contiene X-UA-Compatible, quindi si applica l'alternativa "il Validator non è aggiornato". Anche validator.nu (che è stato detto essere più aggiornato in generale) è obsoleto sotto questo aspetto.
Jukka K. Korpela

Grazie per le correzioni. Non mi ero reso conto che i valori per i meta attributi erano suddivisi su due pagine.
Quentin

1
Vedi la mia risposta per un esempio di come patchare il validatore per supportare X-UA-Compatible. stackoverflow.com/a/21048010/1006963
darcyparker

quindi come posso risolvere il problema dal validatore w3c..posso rimuovere il tag?
Krish

42

Se stai cercando di renderlo tecnicamente valido (tutti amano vedere la favicon verde) senza effettuare alcuna funzionalità, dovresti essere in grado di racchiuderlo semplicemente in un tag "if IE".

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

22
Ciò disabilita efficacemente il supporto di Chrome Frame poiché Chrome Frame ignora i commenti condizionali di IE, vedere jeffreybarke.net/2010/08/…
Jasper Moelker

5
@JasperMoelker: probabilmente vale la pena ricordare che l'articolo a cui hai fornito il link contiene effettivamente una soluzione alternativa anche per Chrome Frame, il che è fantastico: convalida + supporto per Chrome Frame!
Luca

5
No no no, questo rompe l'X-UA-Compatible. xn--mlform-iua.no/blog/…
brentonstrine

30

Una possibile soluzione è implementare una correzione lato server nell'intestazione, come suggerito in questo bel articolo di Aaron Layton. (Tutto il merito dovrebbe andare a lui, e io parafraserò piuttosto che plagiare ...)

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

"Quando Internet Explorer incontra questa linea, cambierà il motore utilizzato prima in Chrome Frame, se il plug-in è installato, e poi in Edge (la modalità documento più alta supportata del browser)."

Passaggi :

  • Correggi la convalida della pagina: ciò si ottiene semplicemente rimuovendo il tag
  • Velocità di rendering: invece di attendere che il browser veda il tag e quindi cambi modalità, invieremo la modalità corretta in anticipo come intestazione di risposta
  • Assicurati di mostrare solo la correzione per Internet Explorer: utilizzeremo solo un rilevamento del browser lato server e lo invieremo solo a IE

Per aggiungere l'intestazione in PHP possiamo semplicemente aggiungerla alla nostra pagina:

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


Oppure puoi aggiungerlo al tuo file .htaccess in questo modo:

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


Link all'articolo originale, controlla i commenti per eventuali avvertimenti. Include anche un'implementazione per C #.

Risolto il problema con X-UA-Compatible una volta per tutte

Spero che questo ti aiuti!


1
Al momento della stesura di questo articolo, questa soluzione è implementata nel file HTML5BP .htaccess. Quindi, a condizione che il tuo server Apache abbia mod_headers abilitati, sarai sicuro di rimuovere il <meta>dal file html.
Patrick James McDougle

Se stai usando Spring MVC, come me, è ancora abbastanza facile da fare. Stai cercando :,response.addHeader("X-UA-Compatible", "IE=edge,chrome=1"); ma ecco una sintesi completa di GitHub .
Paul Nelson Baker

1
@PatrickJamesMcDougle ho dovuto abilitare sia le headerse setenvifmods sul mio server Apache per ottenere questo al lavoro.
iglvzx

Importa dove viene aggiunto? Dovrebbe essere la prima cosa?
Soggiorno il

1
Responsabile del validatore HTML W3C qui. Se inserisci "chrome = 1" nel valore, la soluzione in questa risposta non funzionerà più, perché da allora abbiamo aggiunto anche un controllo per l'intestazione (insieme al controllo del meta elemento), e secondo le specifiche HTML, in entrambi i punti (il meta elemento o l'intestazione) l'unico valore consentito è "IE = Edge".
sideshowbarker



1

Se scarichi / crei il codice src del validatore, puoi aggiungere il supporto da solo.

Aggiungi quanto segue a un file come html5-meta-X-UA-Compatible.rnc) Quindi includilo in html5full.rnc.

L'ho fatto e funziona bene per la convalida.

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

Rimuovilo ,chrome=1dal meta tag, funzionerà correttamente. Con validatore:

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

-1

Ho avuto lo stesso problema e l'aggiunta di e per circondare l'intera linea ha risolto la situazione.

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

1
Qualcuno sa perché è downvoted? In realtà fa funzionare correttamente il validatore.
Maciej Paprocki

2
Probabilmente perché in realtà non ottiene nulla. 1. I commenti condizionali non funzionano in IE10 e versioni successive. 2. X-UA-Compatible consente di fare in modo che i browser più recenti emulino quelli più vecchi. Quindi ciò che questa riga effettivamente dice è: 1. IE 10 e 11, renderizzano usando la modalità predefinita (poiché non analizzano più i commenti condizionali) 2. IE 9, renderizzano come IE 9 (cioè, la sua modalità predefinita nella maggior parte dei casi). 3. IE <9, rendering utilizzando la modalità predefinita (poiché non possono emulare un browser più recente di loro)
aleayr

Aggiungerò anche che fa funzionare il validatore "correttamente" perché è all'interno di un commento (quindi il validatore lo ignora).
aleayr
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.