6

lavoro per un'azienda in cui attualmente tutti i nostri siti utilizzano il doctype transitorio XHTML 1.0 (sì, so che è molto vecchio). Voglio cambiarli tutti per usare il doctype HTML5 visto che è retrocompatibile. Uno dei motivi per cui voglio fare il passaggio è perché in IE8 se qualcuno ha installato gli strumenti di sviluppo, allora il vecchio doctype XHTML cambia il browser in modalità di compatibilità e rende la pagina come IE7. Dalla lettura su di esso sono stato indotto a credere che il doctype HTML5 imposterà qualsiasi pagina per renderizzare in modalità standard, ma questo non succede quando lo provo sul nostro server di staging che gira ancora nella modalità di rendering di IE7.Il doctype HTML5 non attiva la modalità standard in IE8

La cosa strana è che se salvi localmente la pagina con doctype HTML5 e la apro, viene resa in modalità standard IE8. Deve esserci qualcos'altro che lo ha fatto cadere nella compatibilità con il rendering IE7. Qualche idea su cosa potrebbe essere?

sotto è il capo della pagina di test che sono stati a guardare:

<!DOCTYPE html > 

<html xmlns="http://www.w3.org/1999/xhtml" xmlns:og="http://opengraphprotocol.org/schema/" xmlns:fb="http://www.facebook.com/2008/fbml"> 
<head> 

    <title>Burton - Mens Clothing - Mens Fashion - Burton Menswear</title> 

    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 

    <meta name="description" content="Burton is one of the UK's leading men's clothing &amp; fashion retailers, with a range of men's clothing designed to make you look &amp; feel good. Find formal &amp; casual clothes &amp; accessories for men online at Burton menswear"/> 
    <meta name="keywords" content="menswear, clothes for men, clothing for men, men clothes, men's fashion, men's wear, men's clothing online, men's clothes online, men's clothes shop, burton men's, burton menswear, burton uk, burton"/> 

    <script type="text/javascript">document.getElementsByTagName('html')[0].className = 'js';</script> 

    <link rel="stylesheet" type="text/css" href="http://eu.burton-menswear.com/wcsstore/ConsumerDirectStorefrontAssetStore/images/colors/color2/v3/css/screen.css" /> 
    <link rel="stylesheet" type="text/css" href="http://eu.burton-menswear.com/wcsstore/ConsumerDirectStorefrontAssetStore/images/colors/color2/v3/css/print.css" media="print"/> 

    <link rel="stylesheet" type="text/css" href="http://eu.burton-menswear.com/wcsstore/ConsumerDirectStorefrontAssetStore/images/colors/color2/v3/css/brand.css" /> 

    <!--[if lt IE 8]> 
    <link rel="stylesheet" href="http://eu.burton-menswear.com/wcsstore/ConsumerDirectStorefrontAssetStore/images/colors/color2/v3/css/ie.css" type="text/css" media="screen, projection"> 
    <![endif]--> 

    <meta http-equiv="content-language" content="en-gb" /> 

    <link rel="shortcut icon" type="image/x-icon" href="http://eu.burton-menswear.com/favicon.ico" /> 
    <link rel="search" type="application/opensearchdescription+xml" title="burton.co.uk Search" href="http://eu.burton-menswear.com/burton-search.xml"/> 
    <!-- Start Summit Tag --> 
    <script type="text/javascript"> 
    var __stormJs = "t1.stormiq.com/dcv4/jslib/3286_D92B7532_4A18_46A8_864A_5FDF1DF25844.js"; 
</script> 
    <script type="text/javascript" src="http://eu.burton-menswear.com/javascript/track.js"></script> 
    <!-- End Summit Tag --> 
    <!-- Start QuBit Tag --> 
    <script src=//d3c3cq33003psk.cloudfront.net/opentag-31935-42109.js async defer></script> 
    <!-- End QuBit Tag --> 
    <link type="text/css" rel="stylesheet" href="http://reviews.br.wcstage.arcadiagroup.ltd.uk/bvstaging/static/6028-en_gb/bazaarvoice.css" ></link> 

</head> 
+2

Stab in the dark .. ma, prova ad aggiungere questo al tuo '': '' – Labu

+0

'xmlns = "http://www.w3.org/1999/xhtml" 'dovrebbe essere il problema. – xiaoyi

risposta

16

Ci sono un paio di impostazioni in IE 8 che possono causare le pagine di rendere in modalità di compatibilità, indipendentemente dal contenuto HTML della pagina o intestazioni HTTP:

  1. pagina> Impostazioni Visualizzazione Compatibilità

    • Se "Mostra siti Intranet in Visualizzazione Compatibilità" è selezionato, quindi IE renderà tutti i siti sulla rete locale in visualizzazione compatibile. (Ciò mi è successo alcune volte durante lo sviluppo.)

    • Se "Includi elenchi di siti Web aggiornati da Microsoft" è selezionato, IE scaricherà un elenco di siti Web da Microsoft e li visualizzerà tutti in visualizzazione di compatibilità.

    • Se "Mostra tutti i siti Web in Visualizzazione Compatibilità" è selezionato, quindi, è possibile indovinare cosa succede.

  2. Strumenti> Opzioni Internet> Avanzate> Navigazione

    • Se “recuperare automaticamente da errori di layout di pagina con Visualizzazione Compatibilità” sia selezionata, quindi IE a volte passare alla visualizzazione compatibilità se si pensa che una pagina il layout è rotto.

  3. E, infine, se si passa a una pagina e quindi fare clic su Pagina> Visualizzazione Compatibilità (o fare clic sull'icona vista compatibilità nella barra degli indirizzi), allora quella pagina sarà reso nel vista di compatibilità .

Quindi, anche se vale la pena di mettere X-UA-Compatible in là e utilizzando un doctype come quello HTML5 (in modo che le vostre intenzioni sono chiare), controllare sempre queste impostazioni prima durante il test.

+1

Grazie Paul, questo è davvero d'aiuto. Sono stati spuntati i siti intranet di visualizzazione in modalità di compatibilità. Penso che aggiungerò nel meta tag X-UA-Compatible anche solo per essere al sicuro. –

+0

@ElGuapo: sei il benvenuto - sono stato catturato da questo alcune volte, così come i collaudatori con cui ho lavorato. È un po 'esasperante che IE 8 abbia un'interfaccia "Compatibility View Settings" che * non * contenga tutte le impostazioni di visualizzazione compatibili, ma quella intranet sembra essere quella che di solito fa scattare le persone, ed è un default comprensibile. –

4

Sia il doctype XHTML 1.0 Transitional (quando utilizzato dalla specifica, con un URL) e <!doctype html> attivano la "Modalità standard" in IE. Se ciò non accade, c'è una moltitudine di ragioni che probabilmente non hanno nulla a che fare con la modifica del doctype (e possono essere analizzate solo se sono disponibili informazioni aggiuntive, come un URL); vedere IE 8 and IE 9 complications in Attivazione delle modalità del browser con Doctype.

Il passaggio a <!doctype html> è inutile e un potenziale problema, a meno che non si modifichi effettivamente il markup. Nella convalida, che è l'altra ragione per usare doctype, causa un'analisi completamente diversa e abbastanza spesso messaggi di errore sui costrutti validi in XHTML 1.0.

+0

Ciao Jukka, cambiare il doctype in HTML5 sembra una cosa sensata da fare dato che stiamo iniziando a fare molto più materiale HTML5 sui nostri siti (in particolare video) - e perché no se è retrocompatibile. Quali potenziali problemi potrei incontrare se modifico il doctype? –

+0

@ElGuapo: significherà che i validatori (ad esempio http://validator.w3.org/) convalideranno il tuo codice come HTML5. Sebbene HTML5 sia (per quanto possibile) compatibile all'indietro con i browser web, non è retrocompatibile nel senso che tutto l'HTML4 sarà HTML5 valido. (Vedi http://www.w3.org/TR/html5-diff/). Certo, puoi sempre convalidarlo come HTML 4, o addirittura ignorare completamente la convalida se vuoi. –

+0

Ciao Paul, grazie. Penso che sia un caso di rielaborare lentamente il codice in HTML5 piuttosto che farlo in un colpo solo. Sfortunatamente non ho accesso a molti markup sui siti perché è bloccato con IBM che fornisce tutto il nostro supporto back-end. Per quanto riguarda la convalida del codice, in un mondo ideale verrebbero convalidate tutte le pagine di tutti i nostri siti, ma so per certo che non lo fanno e non ho il tempo di dedicarmi a risolvere tutti i problemi. Quindi le pagine che non convalidano non sono la fine del mondo. –

8

non sono sicuro se questo aiuta, ma in IE9, è necessario utilizzare:

<!DOCTYPE html> 

e il seguente meta tag:

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

Dopo aver testato le combinazioni di questi due, ecco cosa ho trovato:

  • Nessun tag Doctype o Meta:
    quirks mode, cioè del motore = 5

  • Doctype Solo:
    Standard Mode, cioè del motore = 7

  • Doctype e Meta Tag
    Standard Mode, cioè del motore = 9

  • Meta tag Solo
    Standard Mode, cioè del motore = 9

Come detemine tipo di modalità e il motore:

  • document.compatMode: modalità CSS1Compat = standard, altrimenti sei in quirks mode

  • document.documentMode: rendimenti quale motore di IE sta usando per rendere il documento


Note:

  • In genere Doctype deve essere la prima riga del file. Non sono sicuro, ma penso che un tag XML possa precederlo. Se qualsiasi altra cosa lo precede la vostra probabilità di rompere il vostro dichiarazione DOCTYPE:
  • Meta Tag deve essere collocato in <HEAD>
  • Il tuo post è di 25 giorni, in modo da assumere avete una soluzione. Anche così, non sono sicuro che queste impostazioni di IE9 siano appropriate al tuo problema. Dovrete esaminare window.document.compatMode e window.document.documentMode per determinare se sono valide in IE8
  • Change meta tag per <meta http-equiv="X-UA-Compatible" content="IE=8">
  • Benche è possibile utilizzare solo il meta tag, non mi consiglia di usarlo senza un doctype. Poiché ciò potrebbe causare problemi con XML, CSS e Script

Ho passato ore a cercare di capirlo e di postare questo articolo, quindi spero che qualcuno possa in qualche modo sfruttare le mie ricerche. Che la fonte sia con te ...

+2

Puoi usare un'intestazione HTTP invece di '', che può essere una buona idea se puoi farlo accadere, come [la meta tag e commenti condizionali possono causare problemi l'uno all'altro] (https://github.com/h5bp/html5-boilerplate/issues/1187). –

Problemi correlati