2012-10-29 11 views
8

Sto sviluppando una sorta di libreria JavaScript. E ho il problema che ho alcuni problemi specifici per: Browser: IE8/IE9 e Document Mode: IE7 Ho trovato la soluzione, ma non voglio usarla in tutte le situazioni, e voglio usarla solo quando ho la situazione descritta sopra. So che posso riconoscere il browser usando:Come ottenere il browser "Modalità documento"

return navigator.userAgent.toLowerCase().indexOf('MSIE 8') > -1; 

ma riconosco solo la versione del browser in modo tale, ma non la modalità documento, e io non voglio usare la mia soluzione quando ho, per esempio, il browser modalità IE8 e modalità documento IE 8. C'è un modo per ottenere la modalità documento di pagina in IE? Grazie in anticipo.

risposta

27

È possibile utilizzare document.documentMode per restituire esattamente la modalità documento utilizzata da IE.

Significa che se la modalità browser è impostata su IE9, ma la modalità documento su IE8 restituirà document.documentMode == 8 (mentre la stringa userAgent verrà comunque visualizzata come IE9). Ciò è particolarmente utile se JS include sempre modifiche allo stile poiché è la modalità documento che determina il modo in cui IE rende una pagina, non la modalità browser. La modalità di compatibilità cambia solo la modalità documento (di solito in IE7).

Nei pochi casi che ho avuto bisogno di Ho appena usato qualcosa di simile a differenziare IE:

if (document.documentMode == 7) { 
    doSomethingIn.IE7_only; 
} else { 
    doSomething.everwhereElse; 
} 

Speranza che aiuta un po '.

+0

Posso impostare la modalità documento.come supponiamo se (document.documentMode == 8) {imposta document.documentmode su qualsiasi valore} –

+0

Purtroppo non è possibile impostarlo con javascript. Ma puoi usare il meta tag x-ua-compatability per specificare la modalità IE desiderata. Si noti che funzionerà su versioni legacy di IE (ad esempio non IE11 +). Leggi questo per ulteriori informazioni: http://msdn.microsoft.com/en-us/library/jj676915(v=vs.85).aspx –

+2

Nota che 'document.documentMode' è supportato solo in IE8 +, quindi tu? Avremo bisogno di un 'rilevamento delle caratteristiche' addizionale se hai bisogno di indirizzare il rendering nativo di IE7. – WynandB

1

Non so come recuperare la modalità documento , ma può essere saggio per affrontare il problema in modo più semplice. Supponiamo che tu voglia utilizzare document.querySelector nello script. Ciò fallirebbe in IE8/document mode IE7 Standards. Quindi, un ulteriore controllo per l'esistenza di document.querySelector sé sarebbe la soluzione:

return ~navigator.userAgent.toLowerCase().indexOf('MSIE 8') 
     && document.querySelector; //=> IE8 and Docmode IE7 => false 

trovato un modo per verificare la presenza di modalità documento: utilizzare document.documentMode. Restituisce un numero intero (quindi 7 per gli standard IE7 in modalità documento), 5 per Quirks mode. Sarà undefined per i browser non IE.

+0

Sì, è una buona idea, ma non ho errori di javascript o alcune funzioni mancate, ho solo un comportamento diverso delle stesse funzioni in modalità documento diversa. Come altro modo di usare la tua soluzione, potresti conoscere qualche funzione che non funzionerà con "DocumentMode IE7"? Se trovo tale funzione posso usarlo per riconoscere la modalità documento. – Mikhail

+0

Bene, 'document.querySelector' non funziona in docmode IE7;). In ogni caso, trovato una proprietà del documento IE utile, vedere la risposta aggiornata. – KooiInc

+0

Nota che document.documentMode è supportato solo in IE8 +, quindi avrai bisogno di un 'rilevamento di funzionalità' aggiuntivo se devi scegliere come target il rendering nativo di IE7. – WynandB

Problemi correlati