2012-02-23 17 views
59

En todo navegador reciente:¿Cómo consigo innerWidth en Internet Explorer 8

window.innerWidth // 1920 

En Internet Explorer 8

window.innerWidth // undefined 

¿Cuál es la mejor manera de conseguir este valor en IE8?

+1

¿Ha explorado [jQuery] (http://jquery.com)? Es muy fácil hacer esto usándolo. –

+0

sí seguro, $ (ventana) .innerWidth() también funciona bien en IE8, gracias – antonjs

+4

@AntoJs '$ (ventana) .innerWidth()' no devuelve el mismo número que 'window.innerWidth' si la barra de desplazamiento vertical es visible en la página. –

Respuesta

111

El innerWidth es apoyado por IE9 no IE8, puede hacerlo insteaad:

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

La línea anterior le dará el ancho de IE, así como otros navegadores compatibles con el estándar.


Si utiliza jQuery, $(window).innerWidth() le dará resultado deseado en todos los navegadores también.

+26

'$ (ventana) .innerWidth()' no devuelve el mismo número que 'window.innerWidth' si la barra de desplazamiento vertical está visible en la página. –

+6

.innerWidth() no es aplicable a los objetos de ventana y documento, como se menciona en la documentación de jquery. http://api.jquery.com/innerWidth/ "Este método no es aplicable a objetos de ventana y documento; para estos, use .width() en su lugar". –

+0

Necesitaba 'document.body.clientWidth' incluso en IE9 (peculiaridades) – jan

2

Usted puede obtener esta información de IE 8 con

document.documentElement.clientWidth 

tenga en cuenta que este valor no será exactamente el mismo que IE 9 vuelve para window.innerWidth.

1

Sin jQuery puede probar esto para conseguir height y 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

El comentario 'Chrome' es engañoso ya que esta propiedad es compatible con todos los navegadores modernos: https://developer.mozilla.org/en-US/docs/Web/API/window.innerWidth?redirectlocale=en-US&redirectslug=DOM% 2Fwindow.innerWidth # Browser_compatibility ... incluyendo IE9 que hace obsoleto el 'else if'. – retrovertigo

+1

¿Has leído la pregunta? OP ha solicitado un código que funcionará para IE8 –

+1

déjenme reformular "... que hace que el segundo 'else if' obsoleto". – retrovertigo

0
document.documentElement.clientWidth; 

Esto se utiliza para IE8 para obtener el cliente ancho

4

para IE8 uso

document.documentElement.clientWidth 
-1

favor Nota: El método .innerWidth no es aplicable a los objetos de ventana y documento; para estos, use .width() en su lugar.

jquery api documentation for .innerwidth()

+1

Sé que tiene aproximadamente un año ... pero OP no usa jQuery ... –

5

Para conseguir esto, sigo usando:

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

Pero para imitar el verdadero dom-comprador echar un vistazo a esto: https://stackoverflow.com/a/18136089/1250044

4

Sé que el innerWidth no podría ser lo mismo, pero getBoundingClientRect también se podría utilizar en una capacidad similar:

elem = document.documentElement.getBoundingClientRect(); 
width = elem.getBoundingClientRect().right - elem.getBoundingClientRect().left; 
Cuestiones relacionadas