Problema:
ho fatto un sito usando i frames ed ora che Google mi ha indicizzato i miei visitatori arrivano al sito passando per le pagine che dovrebbero essere contenute in un frameset, vedendole però singolarmente ciò al di fuori del frame contenitore.
Soluzione
Per ovviare al problema si può usare Javascript, facendo si che quando una pagina viene aperta fuori dal suo frameset, questa lo richiami, indicandogli anche quale pagina visualizzare al proprio interno (cioè essa stessa).
<SCRIPT LANGUAGE="JavaScript"> <!-- var thispage; var url=location.href; var pos1, pos2, pos; var to; // are we not in a frameset if (top.frames.length == 0) { // http slashes, file slashes on Unix pos1 = url.lastIndexOf( '/' ); // file slashes on Windows pos2 = url.lastIndexOf( '' ); pos = (pos2>pos1) ? pos2 : pos1; if ( pos != -1 ) { thispage = url.substring( pos + 1 ); to = "index.htm?" + thispage; // on a modern browser we can use location.replace to rewrite the browser // history, otherwise just set the location ver = parseInt(navigator.appVersion, 10); if ( ((navigator.appName == "Netscape") && (ver >= 3)) || ((navigator.appName == "Microsoft Internet Explorer") && (ver >= 4)) ) location.replace(to); else location = to; }; } //--> </SCRIPT>
Siccome con WordPress ho sempre problemi a postare codice, scaricate i file zippati se volete vedere i due file di esempio: frame buster javascript
Come funziona?
Praticamente il frameset viene costruito in modo “dinamico” tramite JS.
Bisogna personalizzare var rightsrc= a cui bisogna indicare la pagina che vorremo contenuta di default, e ovviamente modificare il frameset secondo l’esigenza.
Il codice per la pagina “contenuta” va bene com’è, e si può usare per più pagine.
Ricordiamoci solo che il frameset deve chiamarsi index.htm, oppure bisogna modificare il codice anche in questo.