1. Respuesta a la pregunta principal.
El script $(window).height()
funciona bien (muestra la altura de la ventana gráfica y no el documento con altura de desplazamiento), PERO necesita que coloque correctamente la etiqueta doctype en su documento, por ejemplo, estos doctypes:
Para HTML 5:
<!DOCTYPE html>
Para HTML4 de transición:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
Probablemente el tipo de documento predeterminado asumido por algunos navegadores es tal, que $(window).height()
toma la altura del documento y no la altura del navegador. Con la especificación doctype, se resuelve satisfactoriamente, y estoy bastante seguro de que los peps evitarán el "cambio de desbordamiento de desplazamiento a oculto y luego de regreso", que es, lo siento, un truco un poco sucio, especialmente si no lo hace ' t documentarlo en el código para el uso futuro del programador.
2. Un consejo ADICIONAL, tenga en cuenta:
Además, si está haciendo un script, puede inventar pruebas para ayudar a los programadores a usar sus bibliotecas, permítame inventar un par:
$ (documento) .ready (función () {
if(typeof $=='undefined') {
alert("PROGRAMMER'S Error: you haven't called JQuery library");
} else if (typeof $.ui=='undefined') {
alert("PROGRAMMER'S Error: you haven't installed the UI Jquery library");
}
if(document.doctype==null || screen.height < parseInt($(window).height()) ) {
alert("ERROR, check your doctype, the calculated heights are not what you might expect");
}
});
EDITAR: sobre la parte 2, "Una sugerencia ADICIONAL, nota aparte": @Machiel, en el comentario de ayer (04/09/2014), estaba TOTALMENTE en lo cierto: el cheque de los $ no puede estar dentro del evento listo de Jquery, porque estamos, como señaló, asumiendo que $ ya está definido. Gracias por señalar eso, y por favor, el resto de ustedes lectores corrija esto, si lo usó en sus scripts. Mi sugerencia es: en sus bibliotecas, coloque una función "install_script ()" que inicialice la biblioteca (ponga cualquier referencia a $ dentro de dicha función init, incluida la declaración de ready ()) y AL COMIENZO de dicha función "install_script ()" , verifique si $ está definido, pero haga que todo sea independiente de JQuery, para que su biblioteca pueda "diagnosticarse a sí misma" cuando JQuery aún no esté definido. Prefiero este método en lugar de forzar la creación automática de un JQuery trayéndolo desde un CDN. Esas son pequeñas notas aparte para ayudar a otros programadores. Creo que las personas que crean bibliotecas deben ser más ricas en la retroalimentación a los posibles errores de los programadores. Por ejemplo, Google Apis necesita un manual aparte para comprender los mensajes de error. Eso es absurdo, necesitar documentación externa para algunos pequeños errores que no necesitan que busques un manual o una especificación. La biblioteca debe estar AUTODOCUMENTADA. Escribo código incluso teniendo en cuenta los errores que podría cometer incluso dentro de seis meses, y todavía trata de ser un código limpio y no repetitivo, ya escrito para evitar errores de desarrollador futuro. Creo que las personas que crean bibliotecas deben ser más ricas en la retroalimentación a los posibles errores de los programadores. Por ejemplo, Google Apis necesita un manual aparte para comprender los mensajes de error. Eso es absurdo, necesitar documentación externa para algunos pequeños errores que no necesitan que busques un manual o una especificación. La biblioteca debe estar AUTODOCUMENTADA. Escribo código incluso teniendo en cuenta los errores que podría cometer incluso dentro de seis meses, y todavía trata de ser un código limpio y no repetitivo, ya escrito para evitar errores de desarrollador futuro. Creo que las personas que crean bibliotecas deben ser más ricas en la retroalimentación a los posibles errores de los programadores. Por ejemplo, Google Apis necesita un manual aparte para comprender los mensajes de error. Eso es absurdo, necesitar documentación externa para algunos pequeños errores que no necesitan que busques un manual o una especificación. La biblioteca debe estar AUTODOCUMENTADA. Escribo código incluso teniendo en cuenta los errores que podría cometer incluso dentro de seis meses, y todavía trata de ser un código limpio y no repetitivo, ya escrito para evitar errores de desarrollador futuro. No es necesario que vaya y busque un manual o una especificación. La biblioteca debe estar AUTODOCUMENTADA. Escribo código incluso teniendo en cuenta los errores que podría cometer incluso dentro de seis meses, y todavía trata de ser un código limpio y no repetitivo, ya escrito para evitar errores de desarrollador futuro. No es necesario que vaya y busque un manual o una especificación. La biblioteca debe estar AUTODOCUMENTADA. Escribo código incluso teniendo en cuenta los errores que podría cometer incluso dentro de seis meses, y todavía trata de ser un código limpio y no repetitivo, ya escrito para evitar errores de desarrollador futuro.