Uno dei principali svantaggi di costruire un sito con la
tecnologia dei "frameset" è che i motori di
ricerca classificano le pagine singolarmente e nel caso che
una pagina venga trovata tramite un motore di ricerca, il
navigatore che vi clicca vede la pagina ma non ha visibilità sull'intero sito;
per ovviare e per ottenere la visibilità completa, si può inserire un
automatismo. La tecnica di cui alla presente pagina consente di richiamare automaticamente il frameset principale con la pagina
richiesta aperta all'interno nel frame principale.
Nelle singole pagine di contenuto è presente nella sezione "head" uno script che in fase di caricamento richiama la pagina di definizione frame se la pagina attuale è anche la principale, quindi se questa non si trova già in un frame. Nel browser viene immesso il nome della pagina di definzione frameset con accodato la stringa "?\pagina.htm"; dove pagina.htm è il nome della pagina corrente; nella pagina di definizione frame è presente uno script anch'esso eseguito automaticamente che in caso di esistenza di questa stringa aggiuntiva la elabora in modo da caricare il file nel frame principale; in caso che nell'URL non sia presente tale parametro viene caricata la pagina di default
Occorre inserire degli script sia nella pagina principale che nelle pagine secondarie
Nelle singole pagine di contenuto si inserisce nell'header lo script seguente, che ha lo scopo di richiamare il frameset con un parametro accodato. Lo script può essere uguale per tutte le pagine e non è da parametrizzare in quanto il valore del parametro da passare con l'URL viene determinato dinamicamente usando la proprietà location.pathname; tale proprietà consiste nel nome del file corrente preceduto da slash (\). Nell'esempio seguente, se lo script è presente in un file chiamato faq.htm nella cartella principale del sito, lo script richiama nel browser l'URL
index.html?\faq.htm
E' possibile che le regole di hosting del sito richiedano per il funzionamento una definizione diversa o più elaborata del nome e della posizione del file.
Ci sono diversi modi di dare una istruzione di reindirizzamento ma eviterei di usare l'assegnazione diretta
top.location.href = ... perchè rende inefficace la funzione "indietro" del browser. Si consiglia invece il metodo top.location.replace(...
di seguito lo script in questione da posizionare in header:
Nel file di frameset, che supponiamo chiamarsi index.html va definita nell'header funzione e variabili per interpretare l'URL. E' facile da gestire in quanto la stringa passata dopo il punto interrogativo è accessibile con la proprietà location.search:
Una personalizzazione necessaria è sostituire la stringa "principale.htm" con il nome della pagina di default che deve essere caricata nel frame principale.
Inoltre il nome che viene assegnato al frame in cui deve apparire la pagina deve essere il medesimo usato nella seguente istruzione
parent.MainFrame.location.href = content;
In questo caso, MainFrame.
Rispetto ad una normale definizione di frameset occorre rendere "dinamica" la definizione dei frame; all'interno del tag FRAMESET occorre che la funzione fillFrame() precedentemente definita sia richiamata nel gestore di evento onLoad e che al posto del nome della pagina principale sia posta una definizione dinamica, cioé javascript:parent.blank come nell'esempio seguente
Si osservi anche che la definizione dei frame non impattati, cioè di quelli che non devono essere sostituiti, può restare statica (nell'esempio il LeftFrame)
Lo script che gestisce il parametro nella pagina principale è stato preso quasi di sana pianta da:
The JavaScript Source Navigation Dynamic Frameset
Per un sistema basato sul medesimo principio ma più elaborato:
Re-directing access within frames - Revisited