Ho trovato un copdice javascript da aggiungere alle pagine e alla pagina del frameset che risponde appieno al mio problema. Si basa sul consiglio che mi hai dato ma questo funziona :P
Lo posto così altri possono usufruirne.
==================================================
Questa sequenza assicura che le sottopagine non verranno caricate al di fuori del frameset.
Se un visitatore inserisce l'URL di una sottopagina - la nostra sequenza farà sì che il frameset venga caricato con la sottopagina in uno dei frame.
Sarà necessario inserire una breve sequenza sia sulla pagina del frameset sia su ognuna delle sottopagine.
Quello che succede realmente è questo:
Se una sottopagina viene caricata al di fuori del frameset, la sequenza sulla sottopagina lo rileverà, e caricherà invece il frameset.
Quando il frameset viene caricato, la sequenza sul frameset caricherà la relativa sottopagina nel frame window corretto.
E' necessarioi inserire una breve sequenza nella sezione <head> delle tue sottopagine e della tua pagina frameset.
IL CODICE PER LE SOTTOPAGINE
La sequenza da copiare e incollare sulle sottopagine é questa:
codice:
<HEAD>
<SCRIPT TYPE="text/javascript" LANGUAGE="JavaScript">
<!--
var correct_frame = 0 + (parent.nav ? 1 : 0);
if (self == top || !correct_frame)
top.location.href = 'framespage.htm?subpage.htm';
//-->
</SCRIPT>
</HEAD>
Personalizza questa riga per adattarla alle tue pagine:
top.location.href = 'framespage.htm?subpage.htm';
framespage.htm è il nome della tua pagina dei frame.
subpage.htm è la pagina dove incollerai il codice.
Se la sottopagina si chiamasse mypage.htm e la pagina dei frames si chiamasse index.htm, il link sarebbe:
top.location.href = 'index.html?mypage.htm';
COME FUNZIONA
Questa riga rileva se la pagina è caricata o meno in un frameset:
if (self == top || !correct_frame)
Se la pagina non è caricata in un frameset, verrà eseguito il comando su questa riga:
top.location.href = 'framespage.htm?subpage.htm';
Questo fa aprire la pagina frameset come se tu avessi inserito http://www.yourdomain.com/framespage.htm?subpage
nella casella url del tuo browser.
Il trucco dell'intera sequenza è che la sequenza nella framespage può accedere a ciò che viene inserito subito dopo il simbolo ? attraverso l'oggetto window.location.search, incorporato in javascript.
Questo è il modo in cui vengono passate le informazioni per indicare alla pagina del frameset quale sottopagina caricare.
IL CODICE PER LA PAGINA FRAMESET
codice:
Questa è la sequenza da copiare e incollare sulla pagina dei frame:
<HTML>
<HEAD>
<TITLE>MyFramesPage</TITLE>
</HEAD>
<SCRIPT LANGUAGE="JavaScript">
<!--
var correct_frame = true;
document.write('<FRAMESET COLS="50%,50%">');
document.write('<FRAME SRC="navpage.htm" NAME="nav">');
document.write('<FRAME SRC="',(location.search ?
location.search.substring(1):"defaultsub.htm"),'"" NAME="display">');
document.write('<\/FRAMESET>');
//-->
</SCRIPT>
</HTML>
Personalizza i valori del frameset per adattarli alla tua pagina.
Ricordati di includere tutte le dichiarazioni relative al frameset in enunciati del tipo document.write - nella stessa maniera in cui il frame "nav" viene definito nell'esempio qui sopra.
Il frame window che caricherà le sottopagine dovrà essere così:
codice:
document.write('<FRAME SRC="',(location.search ? location.search.substring(1):"defaultsub.htm"),'"" NAME="display">');
Valori della riga qui sopra che possono essere cambiati secondo le proprie esigenze:
* defaultsub.htm è la pagina di default che viene aperta se il frameset viene aperto normalmente (Cioè: Se il frameset non viene caricato dalla sequenza in una sottopagina).
* display è il nome del frame. Puoi scegliere qualsiasi nome per il frame.
COME FUNZIONA
Questa funzione è in grado di stabilire se un valore è stato passato alla pagina frameset che segue un simbolo ? nell'url:
location.search ? location.search.substring(1) : "defaultsub.htm")
Se un valore viene inserito dopo il simbolo ? nell'url, la funzione rimanda allora il valore. Altrimenti rimanda defaultsub.htm - il nome della pagina di default da caricare.
Per sempllificare, sostituiamo l'output di questa funzione con il nome FunctionGeneratedPage.htm (per questo esempio, non ha importanza se è una pagina default o una sottopagina).
Possiamo quindi sostituire la dichiarazione originale del frame:
codice:
<FRAME SRC="',location.search ? location.search.substring(1) : "defaultsub.htm"),'"" NAME="display">
con questa semplice dichiarazione, che mostra come la riga apparirà nel browser dopo che la funzione è stata decifrata:
codice:
<FRAME SRC="',FunctionGeneratedPage.htm,'"" NAME="display">
In questo modo, ciò che succede si vede in maniera più ovvia ed immediata.
La sequenza raccoglie il valore passato da una sottopagina, oppure il nome della sottopagina di default.
E infine aggiunge al frame l'attributo relativo al nome "display".
Anche se non è una pagina di default dichiarata nel frameset, quando proviamo ad aprirla, verrà aperta all'interno del frameset.