24. Finestres múltiples

 

Índex

Introducció

El JavaScript potencia les possibilitats de l'HTML de treballar amb més d'un document alhora. En particular, és possible:

 

Finestres amb marcs

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

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

 

Obrir una nova finestra: open()

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!

Cal notar que, degut a l'ús abusiu que s'ha fet d'aquest recurs, avui els navegadors no obren aquesta mena de finestres llevat que l'usuari ho autoritzi expressament.

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.

 

Obrir una finestra i posar-hi una part del document

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()

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

 

Desplaçament d'una finestra

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