Newsgroup: it.comp.lang.javascript
Titolo: Lavorare con i frame

Volendo evitare che una pagina, che solitamente e' visualizzata
all'interno di un frame, venga vista come pagina singola (per esempio
da chi vi arriva passando da un motore di ricerca):
ho provato a scrivere uno script del tipo:
*******************************************************************
<HTML>
<HEAD>
<META http-equiv="content-type" content="text/html;
charset=iso-8859-1">
<TITLE>Frame numero due</TITLE>
<SCRIPT language="javascript" type="text/javascript">
<!--
if (top.window == self.window) {
	var nome = self.location;
	document.open();
	document.write('<HTML><HEAD>');
	document.write('<HTML><HEAD>');
	document.write('<FRAMESET rows="20%, 80%">');	
	document.write('<FRAME name="uno" src="uno.htm">');
	document.write('<FRAME name="due" src="'+nome+'">');
	document.write('</FRAMESET>');
	document.write('</HEAD><BODY bgcolor="blue">');
	document.write('<NOFRAME>Ciao</NOFRAME>');
	document.write('</BODY></HTML>');
	document.close();
}
//-->
</SCRIPT>
</HEAD>
<BODY text="black">
<BR><BR>
Frame numero due
<BR><BR>
</BODY>
</HTML>
*******************************************************************
La pagina uno.htm e' una semplicissima pagina html dove e' scritto:
"Frame numero uno"
Comunque lo script non funziona, sembra che al browser non vada a
genio richiamare una pagina in un frame con lo stesso URL della pagina
che contiene il frame (forse peche' senza JS potrebbe generare un
ciclo?).
Mi sembra anche sbagliato in questo caso rimandare l'utente sulla
pagina principale del frame, vorrei cioe' proprio vedere la pagina
due.htm.
Ciao David

usa:
if (parent.frames.length==0)
   document.location.href='index.htm';
dove index.htm e' la pagina dove e' definito il frameset
certo che questo non impedisce che la tua pagina venga visualizzata
all'interno di un frameset estraneo, ma magari puoi sbizarrirti giocandoci
un po'.
ciao
--
    Federico Sasso &8v>
 
http://www.crt.unige.it/jsSQL
    The jsSQL Project - JavaScript Database and SQL Engine

dove index.htm e' la pagina dove e' definito il frameset
questo è quello che volevo evitare...non volevo rimandare l'utente
sulla pagina con il frameset principale....
avevo ipotizzato una situazione tipo:
index.htm:
<FRAMESET rows="20%, 80%">
<FRAME name="uno" src="uno.htm">
<FRAME name="due" src="frameB.htm">
</FRAMESET>
se fosse richiamata la pagina due.htm che non fa parte del frame
principale (che di default richiama uno.htm e frameB.htm) volevo
visualizzare in alto uno.htm e in basso due.htm
Per evitare di mandare l'utente su una pagina che non ha cercato
(frameB.htm)
E' una situazione molto frequente che si riscontra usando i motori di
ricerca.

ciao Pantheon,
ho trovato la soluzione!
nel file due.htm agguingi lo script di seguito
<html>
<head>
<title>due.htm</title>
<script type="text/javascript">
var ref = document.location.href;
if (parent.frames.length==0)
   document.location.href='fr.htm?ref='+ref;
</script>
</head>
<body>
<p>due.htm</p>
</body>
</html>
poi fatti una pagina fr.htm che contiene il frameset alternativo che hai
ipotizzato:
<html>
<head>
<title>fr.htm</title>
<script type="text/javascript">
var ref = self.location.search
ref = ref.substr(5, ref.length-5)
function loadRef()
{
  due.location.replace(ref);
}
</script>
</head>
<frameset rows="20%, 80%" onLoad="loadRef()">
  <frame name="uno" src="uno.htm">
  <frame name="due" src="about:blank">
</frameset>
</html>
al posto di "about:blank", se causa problemi di compatibilita', puoi mettere
anche una pagina blank.htm vuota
Per testare se funziona fatti una pagina con un link a due.htm a sinulare la
pagina generata dal motore di ricerca, e metti due.htm, uno.htm e fr.htm sul
web server.
questo trucco funziona solo per richieste HTTP, quindi non in locale da
disco
Spero di essere stato chiaro
