Utilización de los objetos predefinidos de JavaScript - BOM
El objeto window
El objeto window representa una ventana abierta del navegador. Mediante este objeto, es posible mover, redimensionar y manipular la ventana actual del navegador. Incluso es posible abrir y cerrar nuevas ventanas de navegador.
Importante: Si en el HTML de una ventana contiene etiquetas de tipo <iframe> el navegador creará un objeto Window para la ventana principal y otros objetos Window para cada una de los <iframe>.
Para ver todas las propiedades y funciones que nos ofrece el objeto Window podemos dirigirnos al enlace de la W3Schools:
Importante: No todos las propiedades/métodos están soportados por todos los navegadores. Para ello debemos de comprobar la compatibilidad. Una buena forma de hacer esto es dirigirnos al link anterior de la W3School y en cada propiedad/método se nos hace mención de su compatibilidad según con qué navegadores.
Propiedades de window
Las propiedades de window más relevantes son:
- defaultStatus : es el mensaje que se visualiza en la barra de estado del navegador.
- frames : es la matriz de la colección de frames que contiene una ventana. Por ejemplo, si queremos hacer referencia al primer frame de la ventana: window.frames[0].frames.length es el número de frames que contiene una ventana.
- self : hace referencia a la ventana actual.
- top : hace referencia a la raíz de la jerarquía de objetos.
- window : hace referencia a la ventana actual.
- innerWidth , innerHeight : anchura y altura interiores de la ventana.
- closed : devuelve un boolean indicando si la ventana se ha cerrado o no.
- screenX , screenY : coordenadas de la ventana en relación a la pantalla. Coordenadas del vértice superior izquierda donde está posicionada la ventana. Válido para los navegadores Google Chrome y IE (para Firefox utilizar screenLeft y screenTop ).
- opener : devuelve una referencia de la ventana padre desde la que se ha creado la ventana hija.
- localStorage : devuelve una referencia al objeto localStorage que se utiliza para almacenar datos. Al contrario que las galletas, no tiene fecha de expiración.
- sessionStorage : devuelve un objeto storage para almacenar datos en una sesión web.
Métodos de window
Los principales métodos del objeto window son:
- alert (mensaje) : crea una ventana de diálogo donde se muestra el mensaje.
- confirm (mensaje) : crea una ventana de confirmación (OK / Cancelar) donde se muestra el mensaje. Devuelve true o false .
- prompt (mensaje, textoXDefecto) : crea una ventana de diálogo donde se muestra el mensaje y permite la edición. El parámetro "texto" es el valor predeterminado. Al igual que confirm , contiene Aceptar y Cancelar. Si aceptamos, el método devuelve el valor insertado (o el valor por defecto). Si cancela, devuelve null . Y siempre, todo lo que se introduzca se considera como un String.
- close () : sólo se pueden cerrar las ventanas que se han creado con un script.
- stop () : detiene la carga de la ventana.
- setTimeout (expresión, msec) : ejecuta la expresión que se pasa como argumento, una vez han pasado un número “msec” de milisegundos. Se utiliza para prorrogar la ejecución de la expresión. Cada vez que ejecutamos este método se devuelve un id para poder, si se quisiera, detenerlo.
- clearTimeout (timeoutID) : restaura la cuenta atrás iniciado por setTimeout .
- setInterval (expresión, msec) : ejecuta la expresión pasada como argumento cada msec milisegundos. Se utiliza para ejecutar la expresión a intervalos regulares de tiempo.
- open (url, Window Name, params) : crea una nueva ventana, le asocia el nombre WindowName , y accede a la URL que le hemos pasado. Le pasamos un conjunto de parámetros que describen las propiedades de la ventana . Entre otros: toolbar , width , height , left , top , fullscreen , resizable , location , status , Scrollbars , Menubar .
En el siguiente ejemplo utilizamos algunos de estos métodos:
También existen 4 métodos para manipular el tamaño y la posición de la ventana:
- moveBy(x, y) : desplaza la posición de la ventana x píxel hacia la derecha y y píxel hacia abajo. Se permiten desplazamientos negativos para mover la ventana hacia la izquierda o hacia arriba.
- moveTo(x, y) : desplaza la ventana del navegador hasta que la esquina superior izquierda se encuentre en la posición (x, y) de la pantalla del usuario. Se permiten desplazamientos negativos, aunque ello suponga que parte de la ventana no se visualiza en la pantalla.
- resizeBy(x, y) : redimensiona la ventana del navegador de forma que su nueva anchura sea igual a (anchura_anterior + x) y su nueva altura sea igual a (altura_anterior + y). Se pueden emplear valores negativos para reducir la anchura y/o altura de la ventana.
- resizeTo(x, y) : redimensiona la ventana del navegador hasta que su anchura sea igual a x y su altura sea igual a y. No se permiten valores negativos.
Los navegadores son cada vez menos permisivos con la modificación mediante JavaScript de las propiedades de sus ventanas. De hecho, la mayoría de navegadores permite a los usuarios bloquear el uso de JavaScript para realizar cambios de este tipo.
A continuación se muestran algunos ejemplos de uso de estas funciones:
Control de tiempos
Al contrario que otros lenguajes de programación, JavaScript no incorpora un método wait() que detenga la ejecución del programa durante un tiempo determinado. Sin embargo, JavaScript proporciona los métodos setTimeout() , setInterval() y clearTimeout (id) que se pueden emplear para realizar tareas similares.
El método setTimeout() permite ejecutar una función al transcurrir un determinado periodo de tiempo:
El método setTimeout() requiere dos argumentos. El primero es el código que se va a ejecutar o una referencia a la función que se debe ejecutar. El segundo argumento es el tiempo, en milisegundos, que se espera hasta que comienza la ejecución del código. El ejemplo anterior se puede rehacer utilizando una función:
Como es habitual, cuando se indica la referencia a la función no se incluyen los paréntesis, ya que de otro modo, se ejecuta la función en el mismo instante en que se establece el intervalo de ejecución.
Aquí tenemos un problema: ¿Y si quisiéramos pasar algún parámetro a la función? Tenemos dos opciones, bien creando variables de clase que puedan ser accesibles en el ámbito de la función, y así no vernos obligados a pasar ningún parámetro, y la segunda opción es pasar un solo argumento como tercer valor de la función setTimeout(): setInterval(function, milliseconds, param1, param2, ...)
setTimeout(muestraMensaje, 3000 , parametro1, parametro2);
Cuando se establece una cuenta atrás, la función setTimeout() devuelve el identificador de esa nueva cuenta atrás. Empleando ese identificador y la función clearTimeout() es posible impedir que se ejecute el código pendiente:
Además de programar la ejecución futura de una función, JavaScript también permite establecer la ejecución periódica y repetitiva de una función. El método necesario es setInterval() y su funcionamiento es idéntico al mostrado para setTimeout():
De forma análoga a clearTimeout(), también existe un método que permite eliminar una repetición periódica y que en este caso se denomina clearInterval():
Veamos un ejemplo que engloba estas 3 métodos:
El objeto location
El objeto location representa la URL de la página HTML que se muestra en la ventana del navegador y proporciona varias propiedades útiles para el manejo de la URL:
De todas las propiedades, la más utilizada es location.href, que permite obtener o establecer la dirección de la página que se muestra en la ventana del navegador.
Además de las propiedades de la tabla anterior, el objeto location contiene numerosos métodos y funciones. Algunos de los métodos más útiles son los siguientes:
- Método assign(): Reemplaza la url actual y navega hacia esa url
location.assign("http://www.ejemplo.com"); // Equivalente a location.href = "http://www.ejemplo.com" - Método replace()
location.replace("http://www.ejemplo.com");
// Similar a assign(), salvo que se borra la página actual del array history del navegador - Método reload()
location.reload(true);
/* Recarga la página. Si el argumento es true, se carga la página desde el servidor. Si es false, se carga desde la caché del navegador */
En el siguiente ejemplo podemos ver en funcionamiento las propiedades y métodos explicados del objeto Location:
El objeto history
El objeto history contiene las URLs visitadas por el usuario (en el marco de una ventana del navegador). El objeto de histórico es parte del objeto window.
Propiedades de history
La propiedad más importante del objeto history es:
- length : devuelve el número de URLs en la lista del histórico de navegación.
Métodos de history
Los métodos más importantes del objeto history son:
- back () : carga la URL previa en la lista del histórico de navegación.
- forward () : carga la siguiente URL en la lista del histórico de navegación.
- go ( number numeroPaginas ) : carga una URL específica en la lista del histórico de navegación. El parámetro es el número de páginas del histórico que debe retroceder. El número debe de ser en negativo. Una vez que hayamos retrocedido en el “history” del navegador, se perderán esas referencias que hemos saltado.
Como ejemplo, y siempre dentro de la misma ventana, trata de de navegar por una serie de páginas webs siguientes URLs, y finalmente introducir la URL del código que se propone.
El objeto navigator
Permite obtener información sobre el propio navegador. En Internet Explorer, el objeto navigator también se puede acceder a través del objeto clientInformation.
Aunque es uno de los objetos menos estandarizados, algunas de sus propiedades son comunes en casi todos los navegadores. A continuación se muestran algunas de esas propiedades:
El objeto navigator se emplea habitualmente para detectar el tipo y/o versión del navegador en las aplicaciones cuyo código difiere para cada navegador. Además, se emplea para detectar si el navegador tiene habilitadas las cookies y Java y también para comprobar los plugins disponibles en el navegador.
Veamos un ejemplo:
El objeto Screen
El objeto screen se utiliza para obtener información sobre la pantalla del usuario. Uno de los datos más importantes que proporciona el objeto screen es la resolución del monitor en el que se están visualizando las páginas. Este objeto no tiene métodos, solo propiedades.
→ Información: A los diseñadores web siempre les ha preocupado saber cuál es la resolución del navegador del cliente para que las páginas web se vean bien en los diferentes formatos de pantalla. Hoy en día, gracias a frameworks como bootstrap , la adaptación de la web en diferentes formatos de pantalla es mucho más fácil.
Las siguientes propiedades están disponibles en el objeto screen:
La altura/anchura de pantalla disponible para las ventanas es menor que la altura/anchura total de la pantalla, ya que se tiene en cuenta el tamaño de los elementos del sistema operativo como por ejemplo la barra de tareas y los bordes de las ventanas del navegador.
Además de la elaboración de estadísticas de los equipos de los usuarios, las propiedades del objeto “screen” se utilizan por ejemplo para determinar cómo y cuánto se puede redimensionar una ventana y para colocar una ventana centrada en la pantalla del usuario.
El siguiente ejemplo redimensiona una nueva ventana al tamaño máximo posible según la pantalla del usuario: