Hva gjør <meta http-equiv="X-UA-Compatible" content="IE=edge">?

Hva'er forskjellen hvis en nettside starter med

<!DOCTYPE html> 
<html> 
  <head> 
    <meta http-equiv="X-UA-Compatible" content="IE=edge"> 

og hvis siden starter med

<!DOCTYPE html> 
<html> 
  <head> 
     <!-- without X-UA-Compatible meta -->

Hvis det ikke er noen forskjell, antar jeg at jeg bare kan ignorere metahodet X-UA-Compatible, siden jeg bare vil at den skal gjengis i standardmodus i alle IE-versjoner.

Løsning

Oktober 2015-oppdatering

Dette svaret ble lagt ut for flere år siden, og nå bør spørsmålet egentlig være bør du i det hele tatt vurdere å bruke X-UA-Compatible-taggen på nettstedet ditt? med de endringene Microsoft har gjort i nettleserne sine (mer om dem nedenfor). Avhengig av hvilke Microsoft-nettlesere du støtter, trenger du kanskje ikke å fortsette å bruke taggen X-UA-Compatible. Hvis du trenger å støtte IE9 eller IE8, vil jeg anbefale å bruke taggen. Hvis du bare støtter de nyeste nettleserne (IE11 og/eller Edge), vil jeg vurdere å droppe denne taggen helt. Hvis du bruker Twitter Bootstrap og trenger å eliminere valideringsadvarsler, må denne taggen vises i den angitte rekkefølgen. Ytterligere informasjon nedenfor:

Metataggen X-UA-Compatible gjør det mulig for webforfattere å velge hvilken versjon av Internet Explorer siden skal gjengis som. IE11 har gjort endringer i disse modusene; se merknaden om IE11 nedenfor. [Microsoft Edge][1], nettleseren som erstattet IE11, respekterer bare metataggen X-UA-Compatible under visse omstendigheter. Se merknaden om Microsoft Edge nedenfor. Ifølge Microsoft bør taggen X-UA-Compatible stå så høyt som mulig i dokumentets head når du bruker den:

Hvis du bruker den X-UA-kompatible META-taggen, vil du plassere den så nær toppen av sidens HEAD som mulig. Internet Explorer begynner å tolke markeringen ved hjelp av den nyeste versjonen. Når Internet Explorer støter på den X-UA-kompatible META-taggen, starter den på nytt ved hjelp av den angitte versjonens motor. Dette går ut over ytelsen fordi nettleseren må stoppe og starte på nytt for å analysere innholdet. Her er alternativene dine:

  • "IE=edge"
  • "IE=11"
  • "IE=EmulateIE11"
  • "IE=10"
  • "IE=EmulateIE10"
  • "IE=9"
  • "IE=EmulateIE9" "IE=9&quot
  • "IE=8"
  • "IE=EmulateIE8"
  • "IE=7"
  • "IE=EmulateIE7"
  • "IE=5" For å forsøke å forstå hva hver enkelt betyr, er her definisjoner gitt av Microsoft: Internet Explorer støtter en rekke dokumentkompatibilitetsmoduser som aktiverer forskjellige funksjoner og kan påvirke måten innholdet vises på:
  • Edge-modus ber Internet Explorer om å vise innhold i den høyeste tilgjengelige modusen. Med Internet Explorer 9 tilsvarer dette IE9-modus. Hvis en fremtidig versjon av Internet Explorer støtter en høyere kompatibilitetsmodus, vil sider som er satt til kantmodus, vises i den høyeste modusen som støttes av den versjonen. De samme sidene vil fortsatt vises i IE9-modus når de vises med Internet Explorer 9. Internet Explorer støtter en rekke dokumentkompatibilitetsmoduser som aktiverer ulike funksjoner og kan påvirke måten innholdet vises på: IE11-modus gir den beste tilgjengelige støtten for etablerte og nye industristandarder, inkludert HTML5, CSS3 og andre.
  • IE10-modus gir den beste tilgjengelige støtten for etablerte og nye industristandarder, inkludert HTML5, CSS3 og andre. IE9-modus gir den beste tilgjengelige støtten for etablerte og nye industristandarder, inkludert HTML5 (Working Draft), W3C Cascading Style Sheets Level 3 Specification (Working Draft), Scalable Vector Graphics (SVG) 1.0 Specification og andre. [Merknad fra redaktøren: IE 9 støtter ikke CSS3-animasjoner.]
  • IE8-modus støtter mange etablerte standarder, inkludert W3C Cascading Style Sheets Level 2.1 Specification og W3C Selectors API; den gir også begrenset støtte for W3C Cascading Style Sheets Level 3 Specification (Working Draft) og andre nye standarder.
  • IE7-modus gjengir innhold som om det ble vist i standardmodus av Internet Explorer 7, uansett om siden inneholder et -direktiv eller ikke.
  • Emuler IE9-modus forteller Internet Explorer at den skal bruke -direktivet for å avgjøre hvordan innholdet skal gjengis. Direktiver for standardmodus vises i IE9-modus og direktiver for quirks-modus vises i IE5-modus. I motsetning til IE9-modus respekterer Emuler IE9-modus direktivet .
  • Emuler IE8-modus ber Internet Explorer om å bruke -direktivet for å bestemme hvordan innholdet skal gjengis. Direktiver for standardmodus vises i IE8-modus og direktiver for quirks-modus vises i IE5-modus. I motsetning til IE8-modus respekterer Emuler IE8-modus direktivet .
  • Emuler IE7-modus ber Internet Explorer om å bruke direktivet for å bestemme hvordan innholdet skal gjengis. Direktiver for standardmodus vises i Internet Explorer 7-standardmodus og direktiver for quirks-modus vises i IE5-modus. I motsetning til IE7-modus respekterer Emuler IE7-modus direktivet . For mange nettsteder er dette den foretrukne kompatibilitetsmodusen.
  • IE5-modus gjengir innhold som om det ble vist i quirks-modus av Internet Explorer 7, noe som er svært likt måten innholdet ble vist på i Microsoft Internet Explorer 5. IE10 MERK: Fra og med IE10 oppfører quirks-modus seg annerledes enn i tidligere versjoner av nettleseren. I IE9 og tidligere versjoner begrenset quirks-modus nettsiden til funksjonene som støttes av IE5.5. I IE10 samsvarer quirks-modus med forskjellene som er spesifisert i HTML5-spesifikasjonen. Personlig velger jeg alltid metataggen http-equiv="X-UA-Compatible" content="IE=edge", ettersom eldre versjoner har mange feil, og jeg vil ikke at IE skal bestemme seg for å gå inn i "Kompatibilitetsmodus" og vise nettstedet mitt som IE7 vs IE8 eller 9. Jeg foretrekker alltid den nyeste versjonen av IE. ***IE11*** Fra [Microsoft][2]: Fra og med IE11 er kantmodus den foretrukne dokumentmodusen; den representerer den høyeste støtten for moderne standarder som er tilgjengelig for nettleseren. Bruk HTML5-dokumenttypeerklæringen for å aktivere kantmodus: `` Edge-modus ble introdusert i Internet Explorer 8 og har vært tilgjengelig i alle senere versjoner. Merk at funksjonene som støttes av kantmodus, er begrenset til de som støttes av den spesifikke versjonen av nettleseren som gjengir innholdet. Fra og med IE11 er dokumentmodus utdatert og bør ikke lenger brukes, unntatt på midlertidig basis. Sørg for å oppdatere nettsteder som er avhengige av eldre funksjoner og dokumentmoduser, slik at de gjenspeiler moderne standarder. Hvis du må målrette en bestemt dokumentmodus slik at nettstedet ditt fungerer mens du omarbeider det for å støtte moderne standarder og funksjoner, må du være klar over at du bruker en overgangsfunksjon som kanskje ikke vil være tilgjengelig i fremtidige versjoner. Hvis du for øyeblikket bruker den x-ua-kompatible toppteksten for å målrette en eldre dokumentmodus, er det mulig at nettstedet ditt ikke gjenspeiler den beste opplevelsen som er tilgjengelig med IE11. ***[Microsoft Edge][3] (Erstatning for Internet Explorer som leveres sammen med Windows 10)*** Informasjon om metataggen "X-UA-kompatibel" for "Edge"-versjonen av IE. [Fra Microsoft][4]: **Innføring av den "levende" Edge-dokumentmodusen** Som vi kunngjorde i august 2013, går vi bort fra dokumentmodus fra og med IE11. Med de siste plattformoppdateringene våre er behovet for eldre dokumentmoduser først og fremst begrenset til eldre Enterprise-nettapper. Med nye arkitektoniske endringer vil disse eldre dokumentmodusene bli isolert fra endringer i den "levende" Edge-modusen, noe som vil bidra til å garantere et mye høyere kompatibilitetsnivå for kunder som er avhengige av disse modusene, og hjelpe oss med å forbedre Edge enda raskere. IE vil fortsatt respektere dokumentmoduser som betjenes av intranettnettsteder, nettsteder på listen over kompatibilitetsvisning, og når de bare brukes med Enterprise-modus. Offentlige nettsteder vil bli gjengitt med den nye Edge-modusplattformen (ignorerer X-UA-kompatibel). Det er vårt mål at Edge er den "levende" dokumentmodusen fra nå av, og ingen andre dokumentmoduser vil bli introdusert fremover. Med endringene i Microsoft Edge til ikke lenger å støtte dokumentmoduser i de fleste tilfeller, har Microsoft et [verktøy][5] for å skanne nettstedet ditt for å sjekke om det har kode som ikke er kompatibel med Edge. ***Chrome=1 Info for IE*** Det finnes ogsåchrome=1som du kan bruke eller bruke sammen med et av alternativene ovenfor, f.eks:<meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1">.chrome=1er for Googles Chrome Frame som er definert som: Google Chrome Frame er et nettlesertillegg med åpen kildekode. Brukere som har plugin-modulen installert, har tilgang til Google Chromes åpne webteknologier og raske JavaScript-motor når de åpner sider i nettleseren. Google Chrome Frame forbedrer sømløst nettleseropplevelsen din i Internet Explorer. Den viser Google Chrome Frame-aktiverte nettsteder ved hjelp av Google Chromes gjengivelsesteknologi, noe som gir deg tilgang til de nyeste HTML5-funksjonene samt Google Chromes ytelses- og sikkerhetsfunksjoner uten på noen måte å forstyrre din vanlige nettleserbruk. Når Google Chrome Frame er installert, blir nettet bare bedre uten at du trenger å tenke på det. Men for at plugin-modulen skal fungere, må du brukechrome=1i metakodenX-UA-Compatible. Mer informasjon om Chrome Frame finner du [her][6]. **Merk:** Google Chrome Frame fungerer bare for [IE6 til og med IE9][13], og ble pensjonert 25. februar 2014. Mer informasjon finner du [her][7]. Takk til @mck for lenken. ***Validering:*** **HTML5**: Siden valideres ved hjelp av [W3 Validator][8] bare ved bruk av<meta http-equiv="X-UA-Compatible" content="IE=Edge">. For andre verdier vil den kaste feilen:Et meta-element med et http-equiv-attributt med verdien X-UA-Compatible må ha et content-attributt med verdien IE=edge. Med andre ord, hvis du harIE=edge,chrome=1vil den ikke validere. Jeg ignorerer denne feilen fullstendig ettersom moderne nettlesere ganske enkelt ignorerer denne kodelinjen. Hvis du må ha fullstendig gyldig kode, bør du vurdere å gjøre dette på servernivå ved å angi HTTP-header. Som en merknad sier Microsoft: "Hvis begge disse instruksjonene sendes (meta og HTTP), har utviklerens preferanse (meta-element) forrang over webserverinnstillingen (HTTP-header)." Se [olibre's svar][9] eller [bitinn's svar][10] for mer informasjon om hvordan du angir en HTTP-header. **XHTML** Det er ikke noe problem med validering når du bruker<meta http-equiv="X-UA-Compatible" content="IE=Edge" />så lenge taggen er riktig lukket (dvs./>vs>`). Twitter Bootstrap. Denne taggen har vært sterkt anbefalt av Bootstrap-teamet siden minst 2014, og Bootlint, linter forfattet av twbs-teamet fortsetter å kaste en advarsel når taggen er utelatt. Linter skiller mellom advarsler og feil, og som sådan kan alvorlighetsgraden av å utelate denne taggen anses som mindre.

    For mer informasjon om X-UA-Compatible, se Microsofts Website Defining Document Compatibility. For mer informasjon om hva IE støtter, se caniuse.com. For mer informasjon om kravene til Twitter Bootstrap, se bootlint-prosjektet wiki-side.

Kommentarer (31)

Bruk content="IE=edge,chrome=1"   Hopp over andre X-UA-kompatible moduser

<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
                                   -------------------------- 
  • Ingen kompatibilitetsikon
    IE9-adresselinjen viser ikke [Kompatibilitetsvisningsknappen][MSICON]
    og siden viser heller ikke et virvar av malplasserte menyer, bilder og tekstbokser.
  • Denne metataggen er nødvendig for å aktivere javascript::JSON.parse() på IE8 (selv når `` er til stede).
  • Korrekthet
    Rendering/utførelse av moderne HTML/CSS/JavaScript er mer gyldig (finere).
  • Ytelse
    Trident rendering engine bør kjøre raskere i sin edge-modus.

    Bruk

    I din HTML




    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
  • IE=edge betyr at IE skal bruke den nyeste (edge) versjonen av sin renderingsmotor.

  • chrome=1 betyr at IE skal bruke Chrome rendering engine hvis den er installert. eller bedre i konfigurasjonen av webserveren din:
    (se også RiaD's svar))

  • Apache som foreslått av pixeline

          BrowserMatch MSIE dvs.
          Header sett X-UA-kompatibel "IE=Edge,chrome=1" env=ie
    
        Header append Vary User-Agent
  • Nginx som foreslått av Stef Pause server {

    ...

        add_header X-UA-Compatible "IE=Edge,chrome=1";
      }
  • Varnish proxy som foreslått av Lucas Riutzel sub vcl_deliver { if( resp.http.Content-Type ~ "text/html" ) { set resp.http.X-UA-Compatible = "IE=edge,chrome=1"; } }

  • IIS (fra og med v7)


Microsoft anbefaler Edge-modus fra og med IE11.

Som bemerket av Lynda (se kommentarer), anbefaler Kompatibilitetsendringer i IE11 Edge-modus: Fra og med IE11 er kantmodus den foretrukne dokumentmodusen;

den representerer den høyeste støtten for moderne standarder som er tilgjengelig for nettleseren.

Men Microsofts holdning var ikke klar. En annen [MSDN-side anbefalte ikke Edge-modus][noEdge]:

Fordi Edge-modus tvinger alle sider til å åpnes i standardmodus, uavhengig av versjonen av Internet Explorer, du kan bli fristet til å bruke dette for alle sider som vises med Internet Explorer. Ikke gjør dette, ettersom X-UA-kompatibel-overskriften bare støttes fra og med med Windows Internet Explorer  8. I stedet anbefaler Microsoft å bruke ``: Hvis du vil at alle støttede versjoner av Internet Explorer skal kunne åpne sidene dine i standardmodus, bruker du HTML5-dokumenttypeerklæringen [...]. Som Ricardo forklarer (i kommentarene nedenfor) kan alle DOCTYPE (HTML4, XHTML1 ...) brukes til å utløse standardmodus, ikke bare HTML5s DOCTYPE. Det viktige er å alltid ha en DOCTYPE på siden. Clara Onager har til og med lagt merke til det i en eldre versjon av Specifying legacy document modes: Edge-modus er kun ment for testformål; ikke bruk den i et produksjonsmiljø. Det er så forvirrende at Usman Y trodde Clara Onager snakket om: Eksemplet [...] er kun gitt for illustrasjonsformål; ikke bruk det i et produksjonsmiljø.

<meta http-equiv="X-UA-kompatibel" content="IE=7,9,10" > **Vel... I resten av dette svaret gir jeg flere forklaringer på hvorfor bruk av `content="IE=edge,chrome=1"` er en god praksis i produksjonen. --------------------------------- Historikk ------- I mange år (2000 til 2008) var [IEs markedsandel mer enn 80 %][IEMS]. Og IE **v6** ble ansett som en *de facto* standard (80 % til 97 % markedsandel i [2003][OneStat], [2004, 2005 og 2006][IE6] bare for IE6, større markedsandel for alle IE-versjoner). Ettersom IE6 ikke overholdt [webstandardene](http://en.wikipedia.org/wiki/Web_standards), **måtte** utviklerne teste nettstedene sine ved hjelp av IE6. Denne situasjonen var gunstig for Microsoft (MS), ettersom webutviklere måtte **kjøpe** MS-produkter (f.eks. kan ikke IE brukes uten å kjøpe Windows), og det var mer lønnsomt å forbli ikke-samsvarende (dvs. Microsoft ønsket å bli **standarden** og utelukke andre selskaper). Derfor var mange nettsteder bare kompatible med IE6, og ettersom IE ikke var i samsvar med nettstandarden, ble ikke alle disse nettstedene gjengitt på en god måte i nettlesere som var i samsvar med standardene. Enda verre var det at [mange nettsteder bare krevde IE](http://hintsforums.macworld.com/showthread.php?t=111479). På denne tiden startet imidlertid Mozilla utviklingen av Firefox, som i størst mulig grad respekterte alle webstandardene (andre nettlesere ble implementert for å gjengi sider på samme måte som IE6). Etter hvert som flere og flere webutviklere ønsket å bruke de nye webstandardfunksjonene, ble flere og flere nettsteder støttet av Firefox enn av IE. Da IEs markedsandel gikk ned, innså MS at det ikke var noen god idé å fortsette å være inkompatibel med standarden. Derfor begynte MS å lansere nye IE-versjoner (IE8/IE9/IE10) som i større og større grad respekterte webstandardene. --------------------------------- Problemet med webinkompatibilitet --------------------------- Men problemet er alle nettstedene som er utformet for IE6: Microsoft kunne ikke lansere nye IE-versjoner som var inkompatible med disse gamle IE6-designede nettstedene. I stedet for å utlede hvilken IE-versjon et nettsted er designet for, ba MS utviklere om å legge til ekstra data (`X-UA-kompatible`) på sidene sine. IE6 brukes fortsatt i 2016 ------------------------- I dag brukes IE6 fortsatt [(0,7 % i 2016)][IE62014] (4,5 % i januar 2014), og noen nettsteder er fortsatt kun kompatible med IE6. Noen intranettnettsteder/applikasjoner testes med IE6. Noen intranettnettsteder er 100 % funksjonelle bare på IE6. Disse selskapene/avdelingene foretrekker å utsette migreringskostnadene: andre prioriteringer, ingen vet lenger hvordan nettstedet/applikasjonen ble implementert, eieren av det gamle nettstedet/applikasjonen gikk konkurs... Kina står for [50 % av IE6-bruken i 2013](www.ie6countdown.com/), men det kan endre seg i løpet av de neste årene etter hvert som [kinesisk Linux-distribusjon spres](http://www.canonical.com/content/canonical-and-chinese-standards-body-announce-ubuntu-collaboration). Vær trygg på nettferdighetene dine --------------------------------- Hvis du (prøver å) respektere nettstandarden, kan du ganske enkelt alltid bruke `http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"`. For å beholde kompatibiliteten med gamle nettlesere er det bare å unngå å bruke de nyeste nettfunksjonene: bruk den undergruppen som støttes av den eldste nettleseren du vil støtte. Eller hvis du vil gå lenger, kan du ta i bruk konsepter som [Graceful degradation], [Progressive enhancement] og [Unobtrusive JavaScript]. (Du kan også lese [Hva bør en webutvikler tenke på?]). Ikke bry deg om den beste gjengivelsen av IE-versjonen: dette er ikke din jobb, ettersom nettlesere må være i samsvar med nettstandarder. Hvis nettstedet ditt er standardkompatibelt og bruker noenlunde de nyeste funksjonene, må **nettlesere være kompatible med nettstedet ditt**. Dessuten er det mange kampanjer for å _drepe_ IE6 ([IE6 no more](http://www.ie6nomore.com/), [MS-kampanje](http://www.webmonkey.com/2011/03/microsoft-kicks-off-campaign-to-kill-internet-explorer-6/)), så i dag kan du unngå å kaste bort tid på IE-testing! Personlig erfaring med IE6 ----------------------- I 2009-2012 jobbet jeg for et selskap som brukte IE6 som den *offisielt eneste tillatte nettleseren*. Jeg måtte implementere et intranettnettsted kun for IE6. Jeg bestemte meg for å respektere nettstandarden, men bruke den IE6-kompatible undergruppen (HTML/CSS/JS). Det var vanskelig, men da selskapet byttet til IE8, var nettstedet fortsatt godt gjengitt fordi jeg hadde brukt Firefox og [firebug][FB] for å sjekke kompatibiliteten med webstandarden.) [Clara]: https://stackoverflow.com/users/1400368 [noEdge]: http://msdn.microsoft.com/library/jj676915.aspx#DCModes [MSICON]: http://windows.microsoft.com/en-US/internet-explorer/products/ie-9/features/compatibility-view [IEMS]: http://en.wikipedia.org/wiki/File:Internet-explorer-usage-data.svg [IE6]: http://en.wikipedia.org/wiki/Internet_Explorer#Desktop_Market_share_by_year_and_version [OneStat]: http://www.onestat.com/html/aboutus_pressbox23.html [IE62014]: http://marketshare.hitslink.com/report.aspx?qprid=3&qpaf=&qpcustom=Microsoft+Internet+Explorer+6.0&qpcustomb=0 [FB]: http://en.wikipedia.org/wiki/Firebug_%28software%29 [Grasiøs degradering]: http://www.w3.org/wiki/Graceful_degredation_versus_progressive_enhancement [Progressiv forbedring]: http://en.wikipedia.org/wiki/Progressive_enhancement [Diskret JavaScript]: http://en.wikipedia.org/wiki/Unobtrusive_JavaScript [Hva bør en webutvikler ta hensyn til?]: https://softwareengineering.stackexchange.com/questions/46716 [Hva bør en webutvikler ta hensyn til?
Kommentarer (20)

Bruk dette for å tvinge IE til å skjule den irriterende nettleserkompatibilitetsknappen i adresselinjen:

<meta http-equiv="X-UA-Compatible" content="IE=edge" />
Kommentarer (8)