Encuentre la altura y el ancho exactos de la ventana gráfica en una forma de navegador cruzado

5 minutos de lectura

Avatar de usuario de Alex Grin
alex mueca

Estoy tratando de encontrar la altura y el ancho exactos de la ventana gráfica de un navegador, pero sospecho que Mozilla o IE me están dando el número incorrecto. Aquí está mi método para la altura:

var viewportHeight = window.innerHeight || 
                     document.documentElement.clientHeight || 
                     document.body.clientHeight;

Todavía no he comenzado con el ancho, pero supongo que será algo similar.

¿Hay una forma más correcta de obtener esta información? Idealmente, me gustaría que la solución también funcione con Safari/Chrome/otros navegadores.

  • posible duplicado de Obtener las dimensiones de la ventana gráfica del navegador con JavaScript

    – Stephan

    24 de noviembre de 2014 a las 13:28

  • Además, puede utilizar el W biblioteca, que maneja la detección de ventana gráfica entre navegadores;)

    – pirsmk

    29 de abril de 2016 a las 13:51

Avatar de usuario de Leo
León

Puedes intentar esto:

function getViewport() {

 var viewPortWidth;
 var viewPortHeight;

 // the more standards compliant browsers (mozilla/netscape/opera/IE7) use window.innerWidth and window.innerHeight
 if (typeof window.innerWidth != 'undefined') {
   viewPortWidth = window.innerWidth,
   viewPortHeight = window.innerHeight
 }

// IE6 in standards compliant mode (i.e. with a valid doctype as the first line in the document)
 else if (typeof document.documentElement != 'undefined'
 && typeof document.documentElement.clientWidth !=
 'undefined' && document.documentElement.clientWidth != 0) {
    viewPortWidth = document.documentElement.clientWidth,
    viewPortHeight = document.documentElement.clientHeight
 }

 // older versions of IE
 else {
   viewPortWidth = document.getElementsByTagName('body')[0].clientWidth,
   viewPortHeight = document.getElementsByTagName('body')[0].clientHeight
 }
 return [viewPortWidth, viewPortHeight];
}

( http://andylangton.co.uk/articles/javascript/get-viewport-size-javascript/ )

Sin embargo, ni siquiera es posible obtener la información de la ventana gráfica en todos los navegadores (por ejemplo, IE6 en modo peculiar). Pero el script anterior debería hacer un buen trabajo 🙂

  • Estuve atascado con un error durante 5 horas, resulta que jquery no devuelve el mismo valor en FF/Chrome al hacer $(document).width() o $(window).width(). window.innerWidth Funciona genial.

    – qwerty

    11 de diciembre de 2012 a las 12:59

  • Esto no parece funcionar dentro de iframes, sino que devuelve el tamaño de iframe. ¿Alguna pista sobre eso?

    –Alejandro García Iglesias

    09/08/2013 a las 19:42

  • @GarciaWebDev Entonces lo que estás diciendo es que funciona correctamente 😉

    – Dee2000

    30/10/2013 a las 16:52

  • @ Dee2000 lo que estoy diciendo o más bien lo que quiero decir es que cuando mides en una página normal, obtienes el tamaño de la ventana gráfica del navegador, pero cuando mides desde el interior de un iframe, obtienes el tamaño del documento de ese iframe, no el ventana del navegador. No estoy seguro si me estoy explicando bien, avíseme si debo reformular.

    –Alejandro García Iglesias

    31 de octubre de 2013 a las 5:22

  • @GarciaWebDev En una página simple, ‘piensas’ que estás obteniendo el tamaño de la ventana gráfica del ‘navegador’, pero no es así. Obtiene el tamaño de la ventana gráfica de la página HTML en la que se encuentra. Ya sea que esa página sea ‘superior’ o en un iframe o un iframe anidado-anidado-anidado, siempre es el tamaño de la ventana gráfica de la página HTML en la que se encuentra. Si desea conocer el tamaño de la ventana gráfica de la página superior (o principal), siempre que su iframe sea ‘amigable’ (no entre dominios), simplemente puede reemplazar “ventana”. con los padres.” o “superior”. a cada valor que pruebe (por ejemplo, parent.innerWidth).

    – Dee2000

    31/10/2013 a las 13:33

avatar de usuario de dzona
dzona

Puede usar una versión más corta:

<script type="text/javascript">
<!--
function getViewportSize(){
    var e = window;
    var a="inner";
    if (!('innerWidth' in window)){
        a="client";
        e = document.documentElement || document.body;
    }
    return { width : e[ a+'Width' ] , height : e[ a+'Height' ] }
}
//-->
</script>

Avatar de usuario de Ben
ben

Siempre he usado document.documentElement.clientHeight/clientWidth. No creo que necesites las condiciones OR en este caso.

  • No podría doler. El resto no se evaluará una vez que se encuentre un valor válido

    –Justin Johnson

    19 de noviembre de 2009 a las 22:53

  • tiene un error tipográfico allí, debería ser: ‘document.documentElement’. esto no funciona en modo quircks… en FF da la altura del documento completo, en lugar de solo ‘clientHeight’, y en IE da ‘0’.

    – vsync

    23 de marzo de 2010 a las 14:40

  • Acordado document.documentElement.clientWidth es el camino a seguir en JS puro. responsejs.com/labs/dimensiones

    – ryanve

    16 de enero de 2012 a las 5:58

  • Acordado. De: quirksmode.org/mobile/viewports.html – “document.documentElement es de hecho el <html> elemento”. “document.documentElement.clientWidth y clientHeight todavía da las dimensiones de la ventana gráfica, y no de la <html> elemento. (Esto es una regla especial Eso va solo para este elemento solo para este par de propiedades. En todos los demás casos, se usa el ancho real del elemento). Por lo tanto, debería funcionar “en todos los casos” desde el modo estándar IE6 y hacia arriba. Estos valores son Excluyendo barras de desplazamiento (a diferencia de window.innerWidth y innerHeight).

    – GitaarLAB

    14/08/2015 a las 22:39


Avatar de usuario de Mathi
Mathi

Prueba esto..

<script type="text/javascript">
function ViewPort()
{
var w = Math.max(document.documentElement.clientWidth, window.innerWidth || 0)
var h = Math.max(document.documentElement.clientHeight, window.innerHeight || 0)
var viewsize = w + "," + h;
alert("Your View Port Size is:" + viewsize);
}
</script>

Usa este consejo: http://www.appelsiini.net/projects/viewport o ese código: http://updatepanel.wordpress.com/2009/02/20/getting-the-page-and-viewport-dimensions-using-jquery/

  • Estoy tratando de hacer esto sin usar jQuery. Supongo que debería haber sido más claro en eso.

    – Alex Sonrisa

    24 de noviembre de 2009 a las 15:39

  • Estoy tratando de hacer esto sin usar jQuery. Supongo que debería haber sido más claro en eso.

    – Alex Sonrisa

    24 de noviembre de 2009 a las 15:39

¿Ha sido útil esta solución?