Più volte negli articoli di approfondimento di questa lista abbiamo trattato dei frame e delle problematiche di gestione ad essi legati nella costruzione di un Website. Chi scrive è convinto della utilità di tali strumenti che, se ben dosati, danno risultati organizzativi apprezabili.
I detrattori dei frame trovano terreno fertile per le proprie critiche nei molti, troppi, siti che di tali strumenti fanno un uso smodato e inopportuno. Circoscrivendo il giudizio ai soli aspetti tecnici, la perplessità che spinge molti webdesigner a non servirsi dei frame è il discorso legato ai motori di ricerca. Come noto, i motori di ricerca non sempre riescono ad indicizzare perfettamente un sito diviso in frame. Molto spesso invece di linkare il file che crea il frameset (solitamente index.html), richiamano i singoli frame che tale struttura vanno a costruire. Il risultato è spesso disastroso, con pagine senza menu o link di navigazione. In ultima analisi una ricerca condotta in questi termini rischia seriamente di compromettere i risultati di un Website e di far perdere potenziali visitatori.
Semplificando, facciamo riferimento al rudimentale grafico che segue. Index.html è il nome del file principale che costruisce il frameset e richiama i due documenti: A nel frame superiore e B nel frame inferiore:
Se il motore di ricerca risponde alla ricerca dell'utente con la pagina index.html non c'è alcun problema. Ma se il motore di ricerca trova il documento A o B?
Javascript fornisce una soluzione a questo problema con uno script che fa della semplicità la sua arma vincente.
L'esempio si compone di 3 file:
- esempio.htm
- alto.htm
- centrale.htm
Per una più semplice comprensione del presente script fai continuamente riferimento ai file sopracitati, verificando le procedure e i dati espressi. Solo in questo modo, con un continuo confronto, comprenderai le peculiarità di questo Javascript.
sx.htm + alto.htm
Il file principale index.html non va modificato in alcuna parte ai fini di questo script. Al contrario è necessario agire sui due file richiamati nella struttura dei frame: sx.htm e alto.htm.
Si è detto della semplicità di questo javascript, che si risolve in sole quattro righe di codice comprese tra i campi <head> dei documenti sopracitati:
<script type="text/javascript" language="javascript">
if(self.name==top.name){
location.href="esempio.htm"
}
</script>
Inserito questo codice in entambi i documenti prova a richiamare i file sx.htm e alto.htm e vedrai che non sarà visualizzato il solo documento che hai cliccato, ma tutta la struttura del sito. Lo script, infatti, ha verificato che il documento richiamato è parte di una struttura a frame, ma che non è il file principale che la costruisce.
Se si fosse trattato di un motore di ricerca che linka una pagina parte di un frameset, il risultato sarebbe stato la visualizzazione dell'intero documento e non solo parte di esso.
Il file richiamato in sostituzione del documento corrente quando lo script capisce che il file è parte di un frameset è "index.html". Per fare un altro esempio, se la stessa cosa viene fatta per la home page di HTML.it lo script andrà cosi' modificato:
<script type="text/javascript" language="javascript">
if(self.name==top.name){
location.href="http://www.html.it"
}
</script>
Se provi a richiamare il file esempio.htm non c'è alcun messaggio di errore nè malfunzionamento, e il comportamente del frameset è assolutamente normale.