Come promesso, vediamo i passaggi del trucco basato sugli input di tipo "hidden" (consideriamo noti la sintassi e l'uso delle proprietà "opener" e "parent").
Metodo degli input hidden, variante "parent" (pagine con frame).
Questa variante si basa sulla possibilità, nelle pagine con più frame, di navigare in una sezione, mentre in un secondo settore la pagina rimane fissa e può registrare dati provenienti dai nostri spostamenti. È di solito utile che i dati registrati non siano mostrati direttamente all'utente: se il frame statico è visibile è sufficiente utilizzare campi di tipo hidden, ma il metodo migliore si basa sull'utilizzo di un frame "invisibile", poichè dichiarato di dimensione = 0.
Ecco i passi necessari:
si crea un pagina con un frame "invisibile":
<frameset rows="*" border="0">
<frameset cols="0,*">
<frame name="invisibile" src="...">
<frame name=""visibile" src="...">
</frameset>
</frameset>
nella pagina corrispondente al frame invisibile si inserisce un campo di input (non è indispensabile che sia hidden, perché la pagina è già nascosta):
<form name="...">
<input type="hidden" name="..." value="">
</form>
le pagine nel frame visibile possono scrivere nell'input appena creato con l'istruzione:
parent.frames[0].document.nomeform.nomeinput.value = x
Metodo degli input hidden, variante "opener" (pagine generate dinamicamente).
Questa variante si basa sull'insieme formato da una pagina "padre" e dalle pagine "figlie" che essa genera dinamicamente. Salvando dei dati in campi hidden presso il padre, le figlie possono comportarsi come degli oggetti, che vengono chiamati e restituiscono un risultato.
Ecco i passi necessari:
si crea una pagina iniziale con un modulo contenente un input "hidden":
<form name="modulo">
<inpu type="hidden" name="interface" value="">
</form>
si inserisce nella pagina iniziale un comando di apertura di una nuova pagina:
var nuova = window.open ("", "Nuova pagina");
var nuovaPagina = nuova.document;
nuovaPagina.writeln ( /* testo HMTL della pagina */ )
se nella nuova pagina si ottiene un dato che si vuole salvare, lo si può inviare alla pagina "genitore", con il seguente comando:
window.opener.document.modulo.interface.value =
/* variabile da salvare */
In entrambe le varianti, XML + DOM rappresentano il passaggio fondamentale per sfruttare il trucco. Un campo hidden accetta solo testo e quindi non può contenere variabili complesse come array. La soluzione è usare un oggetto XML: con il comando "variabile.xml" lo si trasforma in una stringa e lo si invia alla pagina "genitore":
stringaXML = variabileXML.xml;
window.opener.document.modulo.interface.value = stringaXML
Nella pagina "genitore" la stringa viene riparserizzata ed il trasferimento della variabile è completato, tramite un solo campo hidden e qualsiasi sia la complessità dei dati:
NuovaVarXML.loadXML (document.modulo.interface.value)
Nel capitolo 4 verranno descritti diversi esempi che utilizzano le due tecniche:
- la variante parent sarà utilizzata per registrare dati legati alla navigazione (ad esempio il carrello in un sito di e-commerce);
- la variante opener permetterà la creazione di pagine multi - oggetto.
Data la complessità di queste tecniche, aggiungiamo due paragrafi di spiegazioni: il primo approfondisce il concetto di pagina multi - oggetto, il secondo raccoglie alcuni suggerimenti sull'uso massiccio delle stringhe XML in html e javascript.