Newsgroup: it.comp.lang.javascript
Titolo: Javascript, frames e funzioni incrociate

Salve a tutti,
sono qui con un nuovo problema che non riesco a risolvere.
Spero che stavolta non dipenda ancora dai browser.
La situazione e' la seguente: pagina strutturata a frame annidati:
 +-------------------------------------------+
 |                   su                      |
 +----------+--------------------------------+
 |          |                                |
 |          |                                |
 |    dx    |            corpo               |
 |          |                                |
 |          |                                |
 +----------+--------------------------------+
 |                  giu'                     |
 +-------------------------------------------+
Nel frame dx c'e' una pulsantiera rollover coi pulsanti per le varie
pagine che vengono caricate in corpo. La mia idea e' far si' che rimanga
'cliccato' il pulsante relativo alla pagina attualmente caricata.
Ho pensato di procedere cosi': tengo traccia della pagina caricata in
una variabile globale nella pagina in dx e la faccio modificare
intercettando l'onLoad delle pagine in corpo. Questo il codice in dx:
var PaginaAttuale = 'home'
var VecchiaPagina = 'home'
function AggiornaPaginaAttuale (nuovaPag) {
 VecchiaPagina = PaginaAttuale
 PaginaAttuale = nuovaPag
 document.images[VecchiaPagina].src = "../img/" + VecchiaPagina + ".gif"
 document.images[PaginaAttuale].src = "../img/" + PaginaAttuale +
"1.gif"                 
}
// Rollover
// Le immagini hanno lo stesso nome delle pagine a cui si riferiscono
function On (nomeImg) {
  if (nomeImg != PaginaAttuale) {
   document.images[nomeImg].src = "../img/" + nomeImg + "1.gif"
   document.images[PaginaAttuale].src = "../img/" + PaginaAttuale +
".gif"
  }
}
function Off (nomeImg) {
  if (nomeImg != PaginaAttuale) {
    document.images[nomeImg].src = "../img/" + nomeImg + ".gif"
    document.images[PaginaAttuale].src = "../img/" + PaginaAttuale +
"1.gif"
  }
}
Questo l'onLoad:
<BODY onLoad="parent.frames[1].AggiornaPaginaAttuale('home')">
Il valore passato cambia a seconda della pagina.
Il problema e' il seguente (con NN): l'onLoad a volte non viene
intercettato e la variabile non viene modificata.
In apertura del frame, la console riporta l'errore:
document.images[VecchiaPagina] has no properties.
Successivamente tutto fila (incorrettamente, ma senza errori del
genere).
Forse sbaglio a gestire i valori 'stringa'?
La guida javascript di netscape non e' molto chiara a riguardo, o io non
ho trovato il capitolo giusto.
Spero di essermi spiegato bene,
Ciao e grazie,
Mattia
-- 
  ----------------
tes...@inwind.it
ICQ# 31984974
----------------

 Spero che stavolta non dipenda ancora dai browser.
[cut]

 <BODY onLoad="parent.frames[1].AggiornaPaginaAttuale('home')">
Leggendolo senza provarlo dovrebbe essere Ok, ma perché usare onLoad()?
Userei lo stesso link HREF del pulsante per chiamare la seguente funzione:
<A HREF="javascript:Cambia('home')">...IMG...</A>
function Cambia(pagina)
	{
	AggiornaPaginaAttuale(pagina);
	top.frames......location=pagina+'.htm';
	}
Naturalmente ho codificato usando la tua funzione, tu puoi tranquillamente 
aggiornare i links e poi aggiungere il cambio di location.
Fammi sapere se va.
Ciao, Riccardo
-----------------------------------------------------------------------
http://www.jsdir.com
Need a JavaScript password?
http://www.agora.it/Ri.Riccardi/ingresso.html
-----------------------------------------------------------------------
"Any sufficientely advanced technology is indistinguishable from magic"
Arthur Charles Clarke
-----------------------------------------------------------------------

 Dovresti postare il codice della pagina nel frame dx
OK, eccolo qua:
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 4.0 Frameset//EN">
<HTML>
<HEAD>
<TITLE>
Pulsantiera di sinistra
</TITLE>
<SCRIPT LANGUAGE="Javascript" SRC="../script/css.js"></SCRIPT>
<SCRIPT LANGUAGE="Javascript" SRC="../script/img.js"></SCRIPT>
<BASE TARGET="corpo">
</HEAD>
<BODY BGCOLOR="white" onLoad="Avvia()">
<CENTER>
<TABLE WIDTH="126" CELLSPACING="0" CELLPADDING="0" BORDER="0">
<TR>
<TD VALIGN="middle" ALIGN="center" ROWSPAN="2" WIDTH="92"
BGCOLOR="#9933CC">
&nbsp;<BR>
<A HREF="home.htm" onMouseOver="On('home'); window.status='Home Page';
return true" onMouseOut="Off('home')">
<IMG NAME="home" SRC="../img/home.gif" BORDER="0" WIDTH="45"
HEIGHT="17"></A>
<P>
<A HREF="info.htm" onMouseOver="On('info'); window.status='Informazioni
su 
www.grox.org
'; return true" onMouseOut="Off('info')">
<IMG NAME="info" SRC="../img/info.gif" BORDER="0" WIDTH="84"
HEIGHT="42"></A>
<P>
<A HREF="grox.htm" onMouseOver="On('grox'); window.status='A proposito
del grox...'; return true" onMouseOut="Off('grox')">
<IMG NAME="grox" SRC="../img/grox.gif" BORDER="0" WIDTH="86"
HEIGHT="20"></A>
<P>
<A HREF="zonamac.htm" onMouseOver="On('zonamac'); window.status='Entra
nella zona Mac'; return true" onMouseOut="Off('zonamac')">
<IMG NAME="zonamac" SRC="../img/zonamac.gif" BORDER="0" WIDTH="72"
HEIGHT="15"></A>
<P>
<A HREF="zonawww.htm" onMouseOver="On('zonawww'); window.status='Entra
nella zona WWW'; return true" onMouseOut="Off('zonawww')">
<IMG NAME="zonawww" SRC="../img/zonawww.gif" BORDER="0" WIDTH="92"
HEIGHT="15"></A>
<P>
<A HREF="links.htm" onMouseOver="On('links'); window.status='La pagina
dei miei link'; return true" onMouseOut="Off('links')">
<IMG NAME="links" SRC="../img/links.gif" BORDER="0" WIDTH="40"
HEIGHT="16"></A>
<BR>&nbsp;
</TD>
</TR>
</TABLE>
</CENTER>
</BODY>
</HTML>


 ha scritto nel messaggio
news:1eglpie.oyhfk01pfuux0N%teston...@inwind.it...
[cut]

 Fammi sapere se va.
Ciao,
avevo pensato anch'io


 Fammi sapere se va.
Ciao,
ci avevo pensato anch'io, ma il fatto e' che le pagine possono essere
caricate anche da altri link, non solo quelli della pulsantiera. Quindi
i pulsanti non verrebbero aggiornati. Per quello ho pensato di legarne
lo stato alla onLoad delle varie pagine.
Ciao,


 Non mi viene altro in mente.
Avevo gia' provato anche questo. In realta' dopo un attenta revisione
adesso non funziona solo con Navigator 4.08 (su Mac). In pratica il
caricamento del frame e della pagina predefinita funziona (con vari
alert di conferma), mentre il primo click su uno qualsiasi dei pulsanti
carica la pagina relativa ma non l'onLoad non viene invocato (o
intercettato). La pagina viene caricata e 'scrollata' di qualche riga
(?), e i pulsanti non si aggiornano. Solo con un secondo click sullo
stesso pulsante la situazione si stabilizza, e in seguito tutto
funziona.
Sinceramente non so che pesci pigliare. Magari in futuro cambiando
qualche comando la cosa misteriosamente cambiera'.
Grazie cmq,
Mattia


 ha scritto nel messaggio
news:1egnr74.kg40gul8jhc0N%teston...@inwind.it...
[cut]


 qualche comando la cosa misteriosamente cambiera'.
Rettifica, ho installato il communicator 4.73 e funzia.
Evidentemente e' una sorta di bug del navigator 4.08.
Ciao,


 della history.
Hai ragione, cosi' la compatibilita' e' assicurata.
Al prossimo upload ci sara' finalmente una versione frame funzionante.
Ciao,
