2012-02-23 15 views
59

In tutta browser recente:Come posso ottenere innerWidth in Internet Explorer 8

window.innerWidth // 1920 

in Internet Explorer 8

window.innerWidth // undefined 

Qual è il modo migliore per ottenere questo valore in IE8?

+1

Hai esplorato [jQuery] (http://jquery.com)? È molto facile farlo usando questo. –

+0

sì certo, $ (finestra) .innerWidth() funziona bene anche in IE8, grazie – antonjs

+4

@AntoJs '$ (finestra) .innerWidth()' non restituisce lo stesso numero di 'window.innerWidth' se la barra di scorrimento verticale è visibile sulla pagina. –

risposta

111

Il innerWidth è supportato da IE9 non IE8, è possibile fare questo insteaad:

var width = window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth; 

La linea di cui sopra ti porterà la larghezza da IE e altri browser standard-compliant.


Se si utilizza jQuery, $(window).innerWidth() vi darà risultato desiderato in tutti i browser troppo.

+26

'$ (window) .innerWidth()' non restituisce lo stesso numero di 'window.innerWidth' se la barra di scorrimento verticale è visibile sulla pagina. –

+6

.innerWidth() non è applicabile agli oggetti finestra e documento, come menzionato nella documentazione jquery. http://api.jquery.com/innerWidth/ "Questo metodo non è applicabile agli oggetti finestra e documento, per questi, usa invece .width()." –

+0

Mi serviva 'document.body.clientWidth' anche in IE9 (stranezze) – jan

2

È possibile ottenere queste informazioni da IE 8 con

document.documentElement.clientWidth 

Occorre considerare che questo valore non sarà esattamente lo stesso che IE 9 ritorni per window.innerWidth.

1

Senza jQuery si può provare questo per ottenere height e width

var myWidth = 0, myHeight = 0; 
if (typeof (window.innerWidth) == 'number') { //Chrome 
    myWidth = window.innerWidth; 
    myHeight = window.innerHeight; 
} else if (document.documentElement && (document.documentElement.clientWidth || document.documentElement.clientHeight)) { 
    myWidth = document.documentElement.clientWidth; 
    myHeight = document.documentElement.clientHeight; 
} else if (document.body && (document.body.clientWidth || document.body.clientHeight)) { //IE9 
    myWidth = document.body.clientWidth; 
    myHeight = document.body.clientHeight; 
} 
+1

Il commento "Chrome" è fuorviante in quanto questa proprietà è supportata da tutti i browser moderni: https://developer.mozilla.org/en-US/docs/Web/API/window.innerWidth?redirectlocale=en-US&redirectslug=DOM% 2Fwindow.innerWidth # Browser_compatibility ... incluso IE9 che rende obsoleto il "else if". – retrovertigo

+1

Hai letto la domanda? OP ha richiesto il codice che funzionerà per IE8 –

+1

fammi riformulare "... che rende il secondo 'else if' obsoleto". – retrovertigo

0
document.documentElement.clientWidth; 

questo è usato per IE8 per ottenere larghezza cliente

4

per IE8 utilizzare

document.documentElement.clientWidth 
-1

prega nota: il metodo .nernerWidth non è applicabile agli oggetti finestra e documento; per questi, usa invece .width().

jquery api documentation for .innerwidth()

+1

So che questo è circa un anno ... ma OP non sta usando jQuery ... –

5

Per ottenere questo, ho ancora utilizzare:

window.innerWidth = window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth; 
window.innerHeight = window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight; 

Ma per imitare la vera dom-getter dare un'occhiata a questo: https://stackoverflow.com/a/18136089/1250044

4

So che il innerWidth non potrebbe essere uguali, ma è possibile utilizzare getBoundingClientRect nello stesso modo:

elem = document.documentElement.getBoundingClientRect(); 
width = elem.getBoundingClientRect().right - elem.getBoundingClientRect().left; 
Problemi correlati