2012-03-20 10 views
5

Sto lavorando a un prodotto Web che potrebbe essere ospitato come sito intranet. Sto cercando di trovare un modo programmatico per impedire a IE9 di passare in modalità Compatibilità visualizzazione IE9 in modalità browser, anche se "Visualizzazione siti Intranet in Visualizzazione Compatibilità" potrebbe essere attiva.L'intestazione http compatibile X-UA funziona effettivamente con IE9?

sto testando con questa pagina html:

<!DOCTYPE HTML> 

<html> 
    <head> 
     <meta http-equiv="X-UA-Compatible" content="IE=9" /> 
     <title>Company</title> 
    </head> 
    <body> 
    </body> 
</html> 

Ho messo questo in config IIS:

<system.webServer> 
    <httpProtocol> 
     <customHeaders> 
      <clear /> 
      <add name="X-UA-Compatible" value="IE=edge" /> 
     </customHeaders> 
    </httpProtocol> 

come consigliato qui: https://stackoverflow.com/a/5887546, e controllato le intestazioni di risposta in IE9 e vedi:

X-UA-Compatible  IE=Edge 

Ma la pagina mette ancora il browser in Visualizzazione Compatibilità sfoglia modalità r.

La console mostra:

HTML1202: http://intranet-site/test.html is running in Compatibility View because 'Display intranet sites in Compatibility View' is checked. 
test.html 

C'è una domanda simile qui: https://stackoverflow.com/a/3726605/1279516, in cui un commento di Jacob sulla risposta scelta suggerisce che in IE9, non c'è niente che puoi fare per sostituire le 'siti Intranet di visualizzazione in Visualizzazione Compatibilità '. Tuttavia, il suo commento è l'unico posto in cui ho trovato menzione di questo. Qualcuno può confermare o negare questa affermazione?

E c'è qualcos'altro che posso provare? Non dovrei dover dire a tutti i clienti che distribuiscono il nostro prodotto di deselezionare l'impostazione del browser 'Visualizza siti Intranet in Visualizzazione Compatibilità' per tutti i loro utenti.

+0

Quale modalità di documento vedi negli strumenti di sviluppo di IE per il tuo sito? – oryol

+0

La modalità documento è in realtà standard IE9. Ciò garantisce che il rendering sia eseguito in modalità standard, ma non tutte le funzioni di javascript sono disponibili, corretto? – jcairney

+2

No, in realtà dovresti controllare solo la modalità documento. Il modello del browser è un parametro iniziale che determina come deve essere calcolata la modalità documento (per impostazione predefinita). Quindi, se hai la corretta modalità documento, tutto dovrebbe funzionare come previsto. – oryol

risposta

2

A meno che qualcuno non dica diversamente, il commento di oryol suggerisce che tutte le funzionalità sono rese disponibili in base alla Modalità documento, quindi non è necessario provare a controllare ulteriormente la modalità browser una volta ottenuta la modalità documento desiderata.

0

Ho riscontrato un problema simile: la pagina non viene visualizzata correttamente in IE8/9 perché Visualizzazione siti Intranet in Visualizzazione Compatibilità era attivo. Chiedere a tutti gli utenti di disabilitarlo o chiedere una politica di gruppo e aggiungere eccezioni non so quante altre pagine della intranet richiedano questa opzione non è un'opzione. La modalità documento è OK grazie allo X-UA-Compatible: IE=edge. Ma avevo ancora problemi di layout.

Causa: La modalità di compatibilità fa sì che IE invii un altro agente utente al server. Per IE8,9 questo è quello di IE7. Alcune delle mie librerie ASP.NET eseguono alcuni controlli in base a ciò e rendono HTML/CSS specifici di IE7 che risultano in problemi di layout.

Soluzione: Modificare la stringa diUserAgent sul server per "IE9" se si dice "IE7". Ovviamente questa è una soluzione sporca dato che in teoria potrebbe esistere un vero client IE7. Nella mia causa (Intranet), so che i miei utenti hanno solo IE> = 8. La modifica di UserAgent si è dimostrata più difficile del previsto. Ho applicato con successo this idea - derivando una sottoclasse da HttpWorkerRequest e intercettando le richieste per UserAgent. Questo sovraccarico indirettamente request.UserAgent e ha contribuito a risolvere il problema.