Se sposto lo script su index non va in nessun caso, nè che siano nella stessa cartella, nè tantomeno in cartelle diverse.

Il codice originale l'ho preso qui, dove effettivamente dice di fare come consigli tu: la prima parte (fino a <body onload="change()">, compreso) andrebbe nell'index, il secondo pezzo in ogni pagina.
Invece io, forse per poca attenzione, ho fatto in un altro modo e per caso ne ho imbroccato uno che funge.

Riassumo (per chiarezza del topic) l'unica configurazione funzionante (nel caso che i file siano nella stessa cartella):
index ha un frame con id main, in prova c'è questo codice:
codice:
<script type="text/javascript>
function change() {
 var ind = location.href;
 var splitter = ind.indexOf("?");
 if (splitter != -1) {
  var nvar = ind.substring(splitter+1, ind.lenght);
  var param = nvar.indexOf("=");
  if (param != -1) {
   var pag = nvar.substring(0,param);
   var locat = nvar.substring(param+1);
   if (pag == "pag") {
    document.frames['main'].location.href = locat;
   }
  }
 }
 else {
  document.frames['main'].location.href = "framemain.htm"; /* mettete al posto di vuoto la pagina che di defualt deve apparire nell'index */
 }
}
</script>

 <body onLoad="change()">
 
 <script language="JavaScript">
var thispage = "prova.htm"; /* inserire qua il nome completo di estensione della pagina corrente */
if (location.href == top.location.href) {
location.href = "index.htm?pag="+thispage; /* nel caso in cui la pagina non sia aperta in un frame / iframe effettuo il redirect alla index contenete il codice dell'iframe */
}
</script>
In pratica è prova.htm che fa tutto, che controlla di essere dentro un iframe e nel caso contrario apre index e si va a mettere nel posto giusto (nell'iframe "main" che è indicato nello script).

Non so più dove sbattere la testa... e purtroppo di altri script adatti allo scopo non ne ho trovati