Objecte window
L'Objecte window: L'Arrel del Navegador
L'objecte window és l'objecte global de JavaScript quan s'executa en un navegador web. No només representa la finestra oberta del navegador, sinó que també és el contenidor per a tots els altres objectes del BOM (com document, location, history, etc.) i per a les variables i funcions globals de JavaScript.
La Jerarquia (BOM i DOM)
-
window(BOM): L'arrel. Representa la finestra/pestanya sencera. -
document(DOM): Fill dewindow. Representa el contingut HTML carregat dins d'aquesta finestra. -
Elements HTML: Fills de
document. Representen etiquetes concretes (com<img>,<button>, etc.).
L'objecte window es pot ometre en la majoria de referències als seus fills (p. ex., window.document és el mateix que document, i window.alert() és alert()).
Exemple de Jerarquia (DOM)
L'accés directe a elements com document.img1 (utilitzant l'atribut name) és un mètode antic i no es recomana actualment. El mètode estàndard per accedir a elements és utilitzar el DOM (Document Object Model).
| Mètode Antic (Desaconsellat) | Mètode Modern (Recomanat) |
console.log(document.img1.width); |
document.getElementById('id_de_la_imatge').width; |
Codi HTML/JavaScript Modern:
<!DOCTYPE html>
<html>
<body>
<img src="./muntanya.jpg" id="muntanyaImg" alt="Muntanya" />
<script>
// Accedim a l'objecte document a través de window
const imatge = document.getElementById('muntanyaImg');
// Accés a propietats de l'element <img>
console.log("Amplada de la imatge:", imatge.width);
// Accés a una propietat de window (sense window.)
console.log("URL de la pàgina:", location.href);
</script>
</body>
</html>
Propietats Clau de l'Objecte window
Les propietats de window permeten obtenir informació sobre l'estat del navegador i del document.
| Propietat | Descripció | Exemple Pràctic |
document, location, history |
Són els objectes fonamentals del BOM que ja coneixes. | console.log(document.title); |
innerWidth, innerHeight |
Retornen l'amplada i altura de l'àrea visible (viewport) del navegador en píxels, excloent les barres d'eines, etc. | console.log(window.innerWidth); |
screenX, screenY |
Retornen la posició horitzontal i vertical de la finestra del navegador respecte a la pantalla de l'usuari. (També screenLeft/screenTop). |
console.log(window.screenX); |
parent, top, self |
Utilitzades principalment per treballar amb iframes (marcs). parent és el pare immediat; top és la finestra superior (l'arrel de totes les subfinestres); self és la finestra actual (window). |
Permet trencar l'iframe: if (window !== window.top) { window.top.location.href = location.href; } |
localStorage, sessionStorage |
Ofereixen un mecanisme per emmagatzemar dades de forma permanent (localStorage) o durant la sessió actual (sessionStorage) al navegador de l'usuari. |
localStorage.setItem('usuari', 'Jordi'); |
closed |
Retorna un valor booleà (true/false) indicant si la finestra ha estat tancada. |
if (myWindow.closed) { ... } |
status, defaultStatus |
(Nota d'ús: Aquestes propietats estan àmpliament obsoletes o ignorades pels navegadors moderns per raons de seguretat i usabilitat). |
Exemple de Propietats (BOM):
// La mida interior del viewport (la part de la web)
console.log(`Mida del viewport: ${window.innerWidth}x${window.innerHeight}`);
// La posició de la finestra a la pantalla
console.log(`Posició a la pantalla (X, Y): ${window.screenX}, ${window.screenY}`);
// Emmagatzemant una dada
window.localStorage.setItem('tema', 'fosc');
console.log(`Tema guardat: ${localStorage.getItem('tema')}`);
Mètodes Fonamentals de l'Objecte window
Els mètodes de window s'utilitzen per gestionar la finestra del navegador i la interacció amb l'usuari.
Mètodes d'Interacció amb l'Usuari
| Mètode | Propòsit | Exemple Pràctic |
alert(missatge) |
Mostra un missatge a l'usuari i espera que faci clic a OK. | alert('Benvingut!'); |
confirm(missatge) |
Mostra un missatge i botons OK/Cancel. Retorna true o false. |
const volEsborrar = confirm('Estàs segur?'); |
prompt(missatge, [textDefecte]) |
Mostra un missatge i un camp de text per introduir dades. Retorna la dada introduïda o null si es cancel·la. |
const nom = prompt('Introdueix el teu nom:', 'Anònim'); |
Mètodes de Finestra i Temporització
| Mètode | Propòsit | Exemple Pràctic |
open(url, name, params) |
Crea una nova finestra (o pestanya) amb una URL i paràmetres de mida i aparença. Retorna una referència a la nova finestra. | const popup = window.open('/avís.html', 'avís', 'width=400,height=200'); |
close() |
Tanca la finestra actual o una finestra creada per l'open(). |
popup.close(); |
setTimeout(funció, msec) |
Executa la funció una sola vegada després que passin els mil·lisegons (msec). |
const idTimer = setTimeout(() => { alert('Temps esgotat!'); }, 5000); |
setInterval(funció, msec) |
Executa la funció repetidament cada msec mil·lisegons. |
const idInterval = setInterval(() => { console.log('Tick'); }, 1000); |
clearTimeout(id) / clearInterval(id) |
Cancela l'execució pendent de setTimeout o setInterval, utilitzant la ID que retornen. |
clearTimeout(idTimer); |
Exemple de Mètodes (Temporització):
let comptador = 0;
// Configurar una funció que s'executa cada segon
const intervalId = setInterval(() => {
comptador++;
console.log(`Segons passats: ${comptador}`);
// Aturar l'interval després de 5 segons
if (comptador >= 5) {
clearInterval(intervalId); // Atura el temporitzador
console.log("Interval aturat.");
}
}, 1000);
// Una funció que s'executa només una vegada després de 100 mil·lisegons
setTimeout(() => {
alert("Benvingut a la pàgina (amb setTimeout)");
}, 100);
window.open
El mètode window.open() és una funció de JavaScript que s'utilitza per obrir una nova finestra o una nova pestanya al navegador. Et permet especificar la URL a carregar, el nom de la finestra i una sèrie de característiques de visualització, com les dimensions i les barres d'eines.
Sintaxi i Paràmetres
La sintaxi completa de window.open() és:
let novaFinestra = window.open(url, nomFinestra, especificacions, reemplaçarEntradaHistorial);
url (String)
-
Descripció: L'URL del document a carregar a la nova finestra.
-
Opcionalitat: Opcional. Si s'omet (o és una cadena buida
""), la nova finestra o pestanya es crea amb una pàgina en blanc (about:blank). -
Exemple:
'https://www.exemple.cat/pagina.html'
nomFinestra (String)
-
Descripció: Un nom per a la nova finestra o pestanya.
-
Opcionalitat: Opcional.
-
Casos d'Ús:
-
Si el nom coincideix amb una finestra ja oberta, el contingut es recarrega en aquesta finestra existent en lloc d'obrir-ne una de nova.
-
Pots utilitzar valors especials com
_blank(sempre obre una nova finestra o pestanya, per defecte) o_self(carrega l'URL a la finestra actual, actuant com una navegació normal).
-
-
Exemple:
'popupLogin'
especificacions (String)
-
Descripció: Una cadena separada per comes que defineix les dimensions i característiques visuals de la nova finestra. Aquest paràmetre només té efecte real si el navegador obre una finestra nova, no una pestanya.
-
Opcionalitat: Opcional.
-
Exemples Comuns de Característiques:
-
width=W: Amplada de la finestra en píxels. -
height=H: Alçada de la finestra en píxels. -
left=X,top=Y: Posició de la finestra a la pantalla. -
resizable=yes/no: Si l'usuari pot redimensionar la finestra (sovint ignorat). -
toolbar=yes/no: Mostra o amaga la barra d'eines del navegador (sovint ignorat).
-
-
Exemple:
'width=600,height=400,left=100,top=100,resizable=no'
reemplaçarEntradaHistorial (Boolean)
-
Descripció: Indica si l'URL que s'està obrint ha de reemplaçar l'entrada actual a l'historial de la nova finestra.
-
Opcionalitat: Opcional (valor per defecte:
false). -
Cas d'Ús: S'utilitza rarament. Si es posa a
true, la funció funciona de manera similar alocation.replace()dins de la nova finestra.
Valor de retorn
El mètode window.open() retorna una referència a la nova finestra (objecte window).
-
Si l'obertura té èxit, la variable
novaFinestracontindrà l'objecte de la finestra emergent, permetent-te interactuar amb ella des del script original (p. ex., cridar funcions o tancar-la). -
Si l'obertura és bloquejada per un pop-up blocker, retorna
null.
Restriccions importants (bloquejadors de Pop-ups)
-
Activació per Usuari: Perquè
window.open()funcioni correctament i no sigui bloquejat, ha de ser cridat directament dins d'una funció que es desencadena per una interacció de l'usuari (p. ex., unclickd'un botó o una pulsació de tecla). -
Temps d'Espera: Si intentes cridar
window.open()després d'unsetTimeouto d'una promesa asíncrona, serà molt probablement bloquejat.
Exemples i casos d'ús
Obrir una nova pestanya
Aquesta és la forma més comuna d'usar window.open() avui dia, ja que la majoria de navegadors ignoren les especificacions i obren una pestanya.
document.getElementById('obrirPestanya').addEventListener('click', () => {
// La majoria de navegadors ignoren el 'pop-up' i obren una pestanya
window.open('https://www.google.com', '_blank');
});
Obrir una finestra centrada amb dimensions específiques
function obrirLogin() {
const ample = 400;
const altura = 500;
const esquerra = (screen.width / 2) - (ample / 2);
const superior = (screen.height / 2) - (altura / 2);
const especificacions = `width=${ample},height=${altura},left=${esquerra},top=${superior},resizable=no,toolbar=no,menubar=no`;
// Intentem obrir la finestra de login, donant-li el nom 'loginWin'
const loginWindow = window.open('login.html', 'loginWin', especificacions);
if (loginWindow === null) {
alert("El bloquejador de pop-ups ha impedit obrir la finestra de login.");
}
}
Comunicació entre finestres
Utilitzant la referència retornada (novaFinestra), el script original pot interactuar amb el contingut de la nova finestra (si ambdues estan al mateix origen).
let popup;
document.getElementById('obrir').addEventListener('click', () => {
popup = window.open('salutacio.html', 'salutacio', 'width=300,height=200');
});
document.getElementById('enviarMissatge').addEventListener('click', () => {
if (popup && !popup.closed) {
// Crida una funció definida dins de salutacio.html (si tenen el mateix origen)
popup.mostrarMissatge('Hola des de la finestra principal!');
}
});