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

Hvad er forskellen, hvis en webside 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 der ikke er nogen forskel, kan jeg vel bare ignorere metaheaderen X-UA-Compatible, da jeg bare ønsker, at den skal gengives i den mest standardtilstand i alle IE-versioner.

Løsning

Oktober 2015 opdatering

Dette svar blev offentliggjort for flere år siden, og nu bør spørgsmålet egentlig være skal du overhovedet overveje at bruge X-UA-kompatibel-tagget på dit websted? med de ændringer, som Microsoft har foretaget i sine browsere (mere om dem nedenfor). Afhængigt af hvilke Microsoft-browsere du understøtter, behøver du måske ikke at fortsætte med at bruge X-UA-Compatible-tagget. Hvis du har brug for at understøtte IE9 eller IE8, vil jeg anbefale at bruge tagget. Hvis du kun understøtter de nyeste browsere (IE11 og/eller Edge), ville jeg overveje at droppe tagget helt. Hvis du bruger Twitter Bootstrap og har brug for at fjerne valideringsadvarsler, skal dette tag vises i den angivne rækkefølge. Yderligere oplysninger nedenfor:

Metatagget X-UA-Compatible giver webforfattere mulighed for at vælge, hvilken version af Internet Explorer siden skal gengives som. IE11 har foretaget ændringer i disse tilstande; se IE11-noten nedenfor. [Microsoft Edge][1], den browser, der erstattede IE11, respekterer kun metatagget X-UA-Compatible under visse omstændigheder. Se Microsoft Edge-noten nedenfor. Ifølge Microsoft skal X-UA-Compatible-tagget, når du bruger det, placeres så højt som muligt i dit dokument head:

Hvis du bruger X-UA-Compatible META-tagget, skal du placere det så tæt på toppen af sidens HEAD som muligt. Internet Explorer begynder at fortolke markup ved hjælp af den nyeste version. Når Internet Explorer støder på X-UA-Compatible META-tagget, starter den forfra ved hjælp af den angivne version. Dette er en ydelsesmæssig belastning, fordi browseren skal stoppe og starte forfra med at analysere indholdet. Her er dine muligheder:

  • "IE=edge"
  • "IE=11"
  • "IE=EmulateIE11"
  • "IE=10"
  • "IE=EmulateIE10"
  • "IE=9"
  • "IE=EmulateIE9
  • "IE=8"
  • "IE=EmulateIE8"
  • "IE=7"
  • "IE=EmulateIE7"
  • "IE=5" For at forsøge at forstå, hvad de enkelte betyder, er der her definitioner fra Microsoft: Internet Explorer understøtter en række dokumentkompatibilitetstilstande, der aktiverer forskellige funktioner og kan påvirke den måde, hvorpå indholdet vises:
  • Edge-tilstand fortæller Internet Explorer, at indhold skal vises i den højeste tilgængelige tilstand. Med Internet Explorer 9 svarer dette til IE9-tilstand. Hvis en fremtidig udgave af Internet Explorer understøtter en højere kompatibilitetstilstand, vil sider, der er indstillet til kanttilstand, blive vist i den højeste tilstand, der understøttes af den pågældende version. De samme sider ville stadig blive vist i IE9-tilstand, når de blev vist med Internet Explorer 9. Internet Explorer understøtter en række dokumentkompatibilitetstilstande, der aktiverer forskellige funktioner og kan påvirke den måde, hvorpå indholdet vises:
  • IE11-tilstand giver den højeste tilgængelige understøttelse af etablerede og nye industristandarder, herunder HTML5, CSS3 og andre.
  • IE10-tilstand giver den højeste tilgængelige understøttelse af etablerede og nye industristandarder, herunder HTML5, CSS3 og andre.
  • IE9-tilstand giver den bedst mulige understøttelse af etablerede og nye industristandarder, herunder HTML5 (Working Draft), W3C Cascading Style Sheets Level 3 Specification (Working Draft), Scalable Vector Graphics (SVG) 1.0 Specification og andre. [Redaktørens bemærkning: IE 9 understøtter ikke CSS3-animationer].
  • IE8-tilstand understøtter mange etablerede standarder, herunder W3C Cascading Style Sheets Level 2.1 Specification og W3C Selectors API; den giver også begrænset understøttelse af W3C Cascading Style Sheets Level 3 Specification (Working Draft) og andre nye standarder.
  • IE7-tilstand gengiver indhold, som om det blev vist i standardtilstand af Internet Explorer 7, uanset om siden indeholder et direktiv eller ej.
  • Emuler IE9-tilstand fortæller Internet Explorer, at den skal bruge -direktivet til at bestemme, hvordan indholdet skal gengives. Direktiver i standardtilstand vises i IE9-tilstand, og direktiver i quirks-tilstand vises i IE5-tilstand. I modsætning til IE9-tilstand respekterer Emulate IE9-tilstand -direktivet.
  • Emulate IE8-tilstand fortæller Internet Explorer, at den skal bruge -direktivet til at bestemme, hvordan indholdet skal gengives. Direktiver i standardtilstand vises i IE8-tilstand, og direktiver i quirks-tilstand vises i IE5-tilstand. I modsætning til IE8-tilstand respekterer Emulate IE8-tilstand -direktivet.
  • Emulate IE7-tilstand fortæller Internet Explorer, at den skal bruge -direktivet til at bestemme, hvordan indholdet skal gengives. Direktiver i standardtilstand vises i Internet Explorer 7-standardtilstand, og direktiver i quirks-tilstand vises i IE5-tilstand. I modsætning til IE7-tilstand respekterer Emulate IE7-tilstand -direktivet. For mange websteder er dette den foretrukne kompatibilitetstilstand.
  • IE5-tilstand gengiver indhold, som om det blev vist i quirks-tilstand af Internet Explorer 7, hvilket svarer meget til den måde, som indhold blev vist i Microsoft Internet Explorer 5. IE10 BEMÆRK: Fra og med IE10 opfører quirks mode sig anderledes end i tidligere versioner af browseren. I IE9 og tidligere versioner begrænsede quirks-tilstand websiden til de funktioner, der understøttes af IE5.5. I IE10 er quirks mode i overensstemmelse med de forskelle, der er specificeret i HTML5-specifikationen. Personligt vælger jeg altid metatagget http-equiv="X-UA-Compatible" content="IE=edge", da ældre versioner har masser af fejl, og jeg ønsker ikke, at IE beslutter sig for at gå i "Kompatibilitetstilstand" og viser mit websted som IE7 i forhold til IE8 eller 9. Jeg foretrækker altid den nyeste version af IE. IE11 Fra Microsoft: Fra og med IE11 er edge-tilstand den foretrukne dokumenttilstand; den repræsenterer den højeste understøttelse af moderne standarder, der er tilgængelig for browseren. Brug HTML5-dokumenttypedeklarationen til at aktivere edge mode: ` Edge-tilstand blev indført i Internet Explorer 8 og har været tilgængelig i hver efterfølgende version. Bemærk, at de funktioner, der understøttes af kanttilstand, er begrænset til dem, der understøttes af den specifikke version af den browser, der gengiver indholdet. Fra og med IE11 er dokumenttilstande forældede og bør ikke længere anvendes, undtagen midlertidigt. Sørg for at opdatere websteder, der er afhængige af ældre funktioner og dokumenttilstande, så de afspejler moderne standarder. Hvis du er nødt til at målrette en bestemt dokumenttilstand, så dit websted fungerer, mens du omarbejder det for at understøtte moderne standarder og funktioner, skal du være opmærksom på, at du bruger en overgangsfunktion, som muligvis ikke er tilgængelig i fremtidige versioner. Hvis du i øjeblikket bruger x-ua-kompatibel overskriften til at målrette en ældre dokumenttilstand, er det muligt, at dit websted ikke vil afspejle den bedste oplevelse, der er tilgængelig med IE11. ***[Microsoft Edge][3] (erstatning for Internet Explorer, der leveres sammen med Windows 10)*** Oplysninger omX-UA-Compatible-metatag for "Edge" versionen af IE. [Fra Microsoft][4]: **Introduktion af den "levende" Edge-dokumenttilstand** Som vi annoncerede i august 2013, afvikler vi dokumenttilstande fra og med IE11. Med vores seneste platformsopdateringer er behovet for gamle dokumenttilstande primært begrænset til gamle webapps til virksomheder. Med nye arkitektoniske ændringer vil disse gamle dokumenttilstande blive isoleret fra ændringer i den "levende" Edge-tilstand, hvilket vil være med til at sikre et langt højere kompatibilitetsniveau for kunder, der er afhængige af disse tilstande, og hjælpe os med at komme endnu hurtigere videre med forbedringer i Edge. IE vil stadig respektere dokumenttilstande, der anvendes af intranetwebsteder, websteder på listen over kompatibilitetsvisning, og når de kun anvendes med Enterprise Mode. Offentlige internetsider vil blive gengivet med den nye Edge-tilstandsplatform (uden hensyntagen til X-UA-Compatible). Det er vores mål, at Edge skal være den "levende" dokumenttilstand fremover, og at der ikke vil blive indført flere dokumenttilstande fremover. Med ændringerne i Microsoft Edge til ikke længere at understøtte dokumenttilstande i de fleste tilfælde har Microsoft et [værktøj][5] til at scanne dit websted for at kontrollere og se, om det har kode, der ikke er kompatibel med Edge. ***Chrome=1 Info for IE*** Der er ogsåchrome=1, som du kan bruge eller bruge sammen med en af de ovenstående muligheder som f.eks:<meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1">.chrome=1er for Google's Chrome Frame, som er defineret som: Google Chrome Frame er et open source browser-plug-in. Brugere, der har plug-in'et installeret, har adgang til Google Chrome's åbne webteknologier og hurtige JavaScript-motor, når de åbner sider i browseren. Google Chrome Frame forbedrer problemfrit din browsingoplevelse i Internet Explorer. Den viser Google Chrome Frame-aktiverede websteder ved hjælp af Google Chromes renderingsteknologi, hvilket giver dig adgang til de nyeste HTML5-funktioner samt Google Chromes ydeevne og sikkerhedsfunktioner uden på nogen måde at afbryde din sædvanlige brug af browseren. Når Google Chrome Frame er installeret, bliver internettet bare bedre, uden at du behøver at tænke over det. Men for at dette plug-in kan fungere, skal du brugechrome=1i metataggetX-UA-Compatible. Du kan finde flere oplysninger om Chrome Frame [her][6]. **Note:** Google Chrome Frame fungerer kun til [IE6 til IE9][13], og blev trukket tilbage den 25. februar 2014. Du kan finde mere info [her][7]. Tak til @mck for linket. ***Validering:*** **HTML5**: Siden vil kun blive valideret ved hjælp af [W3 Validator][8], når der anvendes<meta http-equiv="X-UA-Compatible" content="IE=Edge">. For andre værdier vil den give følgende fejl:Et meta-element med en http-equiv-attribut, hvis værdi er X-UA-Compatible, skal have en indholdsattribut med værdien IE=edge.Med andre ord, hvis du harIE=edge,chrome=1, vil det ikke blive valideret. Jeg ignorerer denne fejl fuldstændig, da moderne browsere simpelthen ignorerer denne kodelinje. Hvis du skal have fuldstændig gyldig kode, kan du overveje at gøre dette på serverniveau ved at indstille HTTP-header. Som en bemærkning siger Microsoft:Hvis begge disse instruktioner sendes (meta og HTTP), har udviklerens præference (meta-elementet) forrang for webserverens indstilling (HTTP-header).Se [olibre's svar][9] eller [bitinn's svar][10] for flere detaljer om, hvordan man indstiller en HTTP-header. **XHTML** Der er ikke noget problem med validering, når du bruger<meta http-equiv="X-UA-Compatible" content="IE=Edge" />, så længe tagget er korrekt lukket (dvs./>vs>`). Twitter Bootstrap Dette tag er blevet kraftigt anbefalet af Bootstrap-holdet siden mindst 2014, og Bootlint, linteren, der er udarbejdet af twbs-holdet, fortsætter med at sende en warning, når tagget udelades. Linteren skelner mellem advarsler og fejl, og som sådan kan alvorligheden af at udelade dette tag betragtes som mindre alvorlig.

    For yderligere oplysninger om X-UA-Compatible se Microsoft's Website Defining Document Compatibility. For yderligere oplysninger om, hvad IE understøtter, se caniuse.com. Yderligere oplysninger om kravene til Twitter Bootstrap findes på bootlint-projektet wikiside.

Kommentarer (31)

Brug content="IE=edge,chrome=1"   Spring andre X-UA-kompatible-tilstande over

<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
                                   -------------------------- 
  • Ingen kompatibilitetsikon
    IE9-adressebjælken viser ikke [Kompatibilitetsvisningsknappen][MSICON]
    og siden viser heller ikke et virvar af menuer, billeder og tekstbokse, der ikke er på plads.
  • Features
    Dette metatag er påkrævet for at aktivere javascript::JSON.parse() på IE8
    (selv når `` er til stede)
  • Korrekthed
    Rendering/udførelse af moderne HTML/CSS/JavaScript er mere gyldig (pænere).
  • Performance
    Trident rendering engine skulle køre hurtigere i edge-tilstand.

    Anvendelse

    I din HTML




    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
  • IE=edge betyder, at IE skal bruge den nyeste (edge) version af sin renderingsmotor

  • chrome=1 betyder, at IE skal bruge Chrome rendering engine, hvis den er installeret Og bedre i konfigurationen af din webserver:
    (se også RiaD's svar))

  • Apache som foreslået af pixeline

          BrowserMatch MSIE ie
          Header set X-UA-Compatible "IE=Edge,chrome=1" env=ie
    
        Header append Vary User-Agent
  • Nginx som foreslået af Stef Pause server {

    ...

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

  • IIS (siden v7)


Microsoft anbefaler Edge mode siden IE11

Som bemærket af Lynda (se kommentarer), anbefaler Compatibility changes in IE11 Edge mode:

Fra og med IE11 er kanttilstand den foretrukne dokumenttilstand; den repræsenterer den højeste understøttelse af moderne standarder, som browseren har til rådighed.

Men Microsofts holdning var ikke klar. En anden [MSDN-side anbefalede ikke Edge mode][noEdge]:

Fordi Edge-tilstand tvinger alle sider til at blive åbnet i standardtilstand, uanset hvilken version af Internet Explorer der er tale om, du kan være fristet til at bruge dette til alle sider, der vises med Internet Explorer. Det skal du ikke gøre, da overskriften X-UA-Compatible kun understøttes fra og med med Windows Internet Explorer 8. I stedet anbefaler Microsoft, at man bruger ``: Hvis du vil have alle understøttede versioner af Internet Explorer til at åbne dine sider i standardtilstand, skal du bruge HTML5-dokumenttypedeklarationen [...] Som Ricardo forklarer (i kommentarerne nedenfor), kan enhver DOCTYPE (HTML4, XHTML1...) bruges til at udløse standardtilstand, ikke kun HTML5's DOCTYPE. Det vigtige er, at der altid er en DOCTYPE på siden. Clara Onager har selv bemærket det i en ældre version af Specifying legacy document modes: Edge mode is intended for testing purposes only; brug den ikke i et produktionsmiljø. Det er så forvirrende, at Usman Y troede, at Clara Onager talte om: Eksemplet [...] er kun givet til illustration; don't use it in a production environment.

<meta http-equiv="X-UA-Compatible" content="IE=7,9,10" > **Jamen... I resten af dette svar giver jeg flere forklaringer på, hvorfor det er en god praksis at bruge `content="IE=edge,chrome=1"` i produktion.** --------------------------------- Historik ------- I mange år (2000 til 2008) var [IE's markedsandel over 80 %][IEMS]. Og IE **v6** blev betragtet som en *de facto* standard (80 % til 97 % markedsandel i [2003][OneStat], [2004, 2005 og 2006][IE6] for IE6 alene, større markedsandel med alle IE-versioner). Da IE6 ikke overholdt [webstandarder] (http://en.wikipedia.org/wiki/Web_standards), var udviklerne **tvunget** til at teste deres websted med IE6. Denne situation var god for Microsoft (MS), da webudviklere var nødt til **at **købe** MS-produkter (IE kan f.eks. ikke bruges uden at købe Windows), og det var mere profitabelt at forblive ikke-overensstemmende (dvs. Microsoft ønskede at blive **den** standard, der udelukkede andre virksomheder). Derfor var mange mange websteder kun kompatible med IE6, og da IE ikke var i overensstemmelse med webstandarden, blev alle disse websteder ikke godt gengivet på browsere, der overholder standarderne. Endnu værre var det, at [mange websteder kun krævede IE] (http://hintsforums.macworld.com/showthread.php?t=111479). På dette tidspunkt begyndte Mozilla imidlertid at udvikle Firefox, der så vidt muligt respekterede alle webstandarder (andre browsere blev implementeret til at gengive sider som IE6). Efterhånden som flere og flere webudviklere ønskede at bruge de nye webstandardfunktioner, blev flere og flere websteder bedre understøttet af Firefox end af IE. Da IE's markedsandel blev mindre og mindre, indså MS, at det ikke var en god idé at forblive standardinkompatibel. Derfor begyndte MS at frigive nye IE-versioner (IE8/IE9/IE10), der i højere og højere grad respekterer webstandarderne. --------------------------------- Spørgsmålet om webinkompatibilitet --------------------------- Men problemet er alle de websteder, der er designet til IE6: Microsoft kunne ikke frigive nye IE-versioner, der er inkompatible med disse gamle IE6-designede websteder. I stedet for at udlede, hvilken IE-version et websted er blevet designet, bad MS udviklerne om at tilføje ekstra data (`X-UA-Compatible`) på deres sider. IE6 anvendes stadig i 2016 ------------------------- I dag anvendes IE6 stadig [(0,7 % i 2016)][IE62014] (4,5 % i januar 2014), og nogle internetwebsteder er stadig kun IE6-kompatible. Nogle intranetwebsteder/applikationer er testet med IE6. Nogle intranetwebsteder fungerer 100 % kun på IE6. Disse virksomheder/afdelinger foretrækker at udskyde migreringsomkostningerne: andre prioriteter, ingen ved længere, hvordan webstedet/applikationen er blevet implementeret, ejeren af det gamle websted/applikationen er gået konkurs ... Kina tegner sig for [50 % af IE6-anvendelsen i 2013] (www.ie6countdown.com/), men det kan ændre sig i de kommende år, da [kinesisk Linux-distribution er ved at blive udbredt] (http://www.canonical.com/content/canonical-and-chinese-standards-body-announce-ubuntu-collaboration). Vær sikker med dine webfærdigheder --------------------------------- Hvis du (forsøger at) respektere webstandard, kan du blot altid bruge `http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"`. Hvis du vil bevare kompatibiliteten med gamle browsere, skal du blot undgå at bruge de nyeste webfunktioner: brug den delmængde, der understøttes af den ældste browser, du ønsker at understøtte. Hvis du ønsker at gå videre, kan du anvende begreber som [Graceful degradation], [Progressive enhancement] og [Unobtrusive JavaScript]. (Du vil måske også med glæde læse [Hvad bør en webudvikler overveje?]). Du skal ikke bekymre dig om den bedste IE-version, der gengiver IE: Det er ikke din opgave, da browsere skal overholde webstandarderne. Hvis dit websted er i overensstemmelse med standarderne og anvender de moderat nyeste funktioner, skal **browsere derfor være i overensstemmelse med dit websted**. Da der desuden er mange kampagner for at _dræbe_ IE6 ([IE6 no more](http://www.ie6nomore.com/), [MS-kampagne](http://www.webmonkey.com/2011/03/microsoft-kicks-off-campaign-to-kill-internet-explorer-6/)), kan du i dag undgå at spilde tid på IE-testning! Personlig erfaring med IE6 ----------------------- I 2009-2012 arbejdede jeg for en virksomhed, der brugte IE6 som *officiel eneste tilladte browser*. Jeg skulle implementere et intranetwebsted kun til IE6. Jeg besluttede at respektere webstandarden, men at bruge den delmængde (HTML/CSS/JS), der er egnet til IE6. Det var svært, men da firmaet skiftede til IE8, blev hjemmesiden stadig godt gengivet, fordi jeg havde brugt Firefox og [firebug][FB] til at kontrollere web-standard-kompatibiliteten ;) [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 [Graceful degradation]: http://www.w3.org/wiki/Graceful_degredation_versus_progressive_enhancement [Progressiv forbedring]: http://en.wikipedia.org/wiki/Progressive_enhancement [Uoptrækkende JavaScript]: http://en.wikipedia.org/wiki/Unobtrusive_JavaScript [Hvad bør en webudvikler overveje?]: https://softwareengineering.stackexchange.com/questions/46716
Kommentarer (20)

Brug dette til at tvinge IE til at skjule den irriterende browserkompatibilitetsknap i adresselinjen:

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