En HTML és possible de treballar amb més d'una finestra alhora:
El JavaScript potencia aquestes possibilitats:
Cada finestra constitueix un objecte de JavaScript. El terme window és substituït pel nom propi de cada una de les finestres; aquest nom, com és lògic, no es pot ometre, ja que altrament es crearia una indefinició.
La finestra general rep el nom de top, i els marcs que conté es denominen amb el nom que els hàgim donat amb l'atribut name
Així
significa el document contingut en el marc anomenat marcprimer contingut en la finestra general.
Si hi ha marcs dins de marcs, es reitera el procediment:
Amb la denominació parent es pot substituir la denominació del marc immediatament superior. Per exemple, si tenim un document top.marc_a.marc_b.marc_c.document i un altre top.marc_a.marc_b.marc_d.document, podem referir-nos al segon des del primer amb la fórmula
Dins de cada FRAMESET es constitueix automàticament un vector, frames[n], que es pot fer servir com a referència en comptes de basar aquesta en el nom atribuït amb name. Una referència d'aquest tipus pot ésser com ara
Cal recordar que la numeració dels vectors comença per 0.
Quan es fa servir el vector frames[n] no és imprescindible donar nom als marcs.
De la mateixa manera que
provoca el canvi de document present en la finestra, quan hi ha diverses finestres podem escriure
i actuar des d'una finestra sobre una altra.
Amb l'HTML sol això exigeix tantes àncores com possibilitats. Ara no: els canvis poden dependre d'un conjunt de condicions tan complex com calgui.
Exemple
Anàlogament, des d'una pàgina podem modificar les propietats d'una altra.
Exemple
El JavaScript ofereix la funció open(), que crea una nova finestra. A diferència de la propietat target de l'HTML, open() dota la finestra creada de la sèrie d'atributs que el programador considera oportuns.
El format més usat és
adreça especifica la ubicació del document que s'ha de col·locar dins la nova finestra creada.
nom1 és el nom del nou objecte; per referir-nos al document farem servir la denominació nom1.document.
nom2 és el nom de la finestra, equivalent al nom que es dona amb el target d'HTML.
Si volem evitar confusions, no hi ha inconvenient a repetir el mateix nom.
La finestra des de la qual s'executa l'open() queda anomenada automàticament opener.
Les especificacions de les finestres creades són les que s'exposen a continuació:
| height=n | alçada en píxels |
| width=n | amplada en píxels |
| left=n | marge esquerre de la nova finestra, en píxels |
| top=n | marge superior de la nova finestra, en píxels |
| toolbar=yes | proveeix la nova finestra de barra d'eines |
| menubar=yes | proveeix la nova finestra de barra de menús |
| scrollbars=yes | proveeix la nova finestra amb barres de desplaçament |
| resizable=yes | permet que l'usuari modifiqui les mides de la nova finestra arrossegant. |
| location=yes | proveeix la nova finestra de barra d'ubicació |
| directories=yes | proveeix la nova finestra de barra de directoris |
| status=yes | proveeix la nova finestra de barra d'estat |
Per no dotar la finestra d'algun element, n'hi ha prou de no esmentar-lo. Però si no esmentem config ni cap especificació, la nova finestra serà completa.
Si especifiquem que hi ha d'haver barres de desplaçament i el contingut del document és inferior a l'espai disponible assignat, els navegadors actuen de maneres diverses: els uns no presenten les barres; d'altres sí.
Les diverses especificacions s'escriuen l'una a continuació de l'altra separades per comes i sense espais en blanc. Les cometes són inicials i finals del conjunt, no pas de cada element!
Exemple
Usant la denominació opener podem canviar el document present en la finestra des de la qual hem obert la nova.
Exemple
Si des d'una finestra incompleta invoquem un nou document, aquest es situarà en la mateixa finestra incompleta. Però si fem servir target, s'obrirà en una nova finestra completa.
Nota: A causa dels abusos en l'ús de les finestres emergents, els navegadors actuals tenen mecanismes per evitar que se n'obrin en determinades circumstàncies, llevat que l'usuari ho autoritzi. Això fa que aquest recurs hagi perdut valor.
Des d'un document podem crear una finestra i presentar-hi un contingut específic. Per a aconseguir-ho cal combinar la funció open() i el mètode document.write(), d'acord amb l'estructura següent:
Els arguments de document.write() solen dependre de factors diversos (altrament aquest procediment no representaria cap avantatge) i poden contenir, al seu torn, etiquetes HTML. La funció close(), aplicada a document, indica que el flux d'informació cap a la nova finestra s'ha acabat.
Exemple
La funció close() té dues funcions:
La funció close(), aplicada a una finestra es fa servir en general sotmesa a una condició o a un gestor d'esdeveniments, i tant pot funcionar quan hi ha una finestra com quan n'hi ha més d'una:
o bé
quan només n'hi ha una, ja que, com sabem, window se sol ometre.
Quan tanquem una finestra amb close(), alguns navegadors demanen una confirmació.
Exemple
Hi ha dos mètodes que fan possible el desplaçament d'una finestra, moveTo(x,y) i moveBy(x,y).
En el primer cas els valors d'x i y són les noves coordenades de l'angle superior esquerre de la finestra; en el segon, els valors que cal sumar o restar a les coordenades actuals per a obtenir les noves.
Exemple
Quan s'obre una segona finestra, en absència de cap especificació especial, passa a primer pla. Amb el mètode blur() aconseguim que la finestra oberta quedi en segon pla, cosa que pot ésser interessant en determinades circumstàncies. Quan la desplacem, passa a segon pla; si aleshores volem mantenir-la en primer pla, fem servir el mètode focus().
Exemple