Newsgroup: it.comp.lang.javascript
Titolo: frame+history.back che fare?

La disperazione mi porta a saltare i preamboli e ad andare diritto al punto.
Ho una pagina divisa in due frame: leftFrame e rightFrame (che fantasia
eh?).
RightFrame e' diviso a sua volta in topFrame e botFrame.
Per una serie di problemi che mi sono creato (e spero risolto) carico una
pagina in botFrame e da qui con un location.href carico una nuova pagina
(con una barra di comandi) in top.Frame.
A questo punto tra i comandi della suddetta barra c'e' il solito pulsante di
BACK che deve essere relativo a tutto rightFrame.
Ho provato ricaricando la vecchia finestra in top.Frame e fin qui funziona
ma proprio non riesco a far tornare indietro di un passo (o due, visto che
carico in due passaggi??) la finestra botFrame.
Dalla finestrella topFrame ho provato con
 - parent.history.back()
 - parent.botFrame.history.back()
 - document.rightFrame.botFrame.history.back()
 - parent.botFrame.focus(); history.back()
     credendo che fosse un problema di focus...
ma niente, niente, niente funziona!
Se non vi ho confuso le idee, potreste spiegarmi dove la mia ignoranza mi fa
sbagliare, correggermi o propormi una soluzione meno cervellotica ?
Grazie,
                Giorgio

carico in due passaggi??) la finestra botFrame.
Se ho ben compreso, (ed è un "se" di notevole peso...) questo è un
caso in cui, contrariamente a quanto fin'ora ho letto,  l' asserita
equivalenza tra history.back() e history.go(-1) non sussiste. 
Prova ad associare al tasto presente nel frame destro superiore (se
non sbaglio topFrame )
NON
 parent.botFrame.history.back() 
MA
parent.botFrame.history.go(-1)
(se non mi sono perso  nella struttura che eventualmente metti a
posto, ma comunque il nocciolo e'  il back da sostituire con il go(-1)
)
dimmi qualcosa anche solo un 
"maledizione non funziona"

...


Ahime' funziona solo in parte.
Infatti la pagina in botFrame torna finalmente indietro ma non riesco a
caricare la vecchia pagina in topFrame.
Provo a dare
 onClick="parent.botFrame.history.go(-1);
parent.topFrame.location.href='main_top.htm';"
ma viene eseguito solo il cambio di pagina inferiore e....
... nella barra di stato un odiosissimo "errore di visualizzazione".
Dov'e' il mio sbaglio adesso? E' forse quello di cimentarmi col JavaScript??
Ciao,



non e' che ti basta associare 
questo
(doppiaistruzione per compatibilita IE NS NS6 non compreso ma se po'
fa')
function indietro()
{
document.all?parent.history.go(-1):parent.back()
}
Se non va ancora sta diventando una questione di principio
e mi faccio spiegare bene il funzionamento 
Ciao

...



Evidentemente no perche il primo a cambiare se ho ricostruito
correttamente il comportamente del frameset e ' proprio il frame che
contiene i pulsanti. Andrebbe, credo, se questa fosse caricata per
prima  nel sottoframeset.
Ma non scoraggiamoci: prova questa soluzione poco bella molto empirica
ma mi pare funzionante:
 l' esempio prevede la possibilità che che nel botFrame sia avvenuta
una qualche sorta di navigazione, nel qual caso il bottone consente
prima di arretrare in questa e poi di aggiornare la superiore.
se non ti serve trasporta l'istruzione relativa al replace presente in
verifica() come seconda istruzione della funzione indietro() e togli
il riferimento al timeout. La funzione verifica() ovviamente non ti
servira' più come pure i due parametri di controllo
*************
nella pagina che contiene i pulsanti comando
<script>
var presente=""    
var precedente              //queste  dichiarate fuori funzione 
function indietro()
{precedente=parent.botFrame.location.href;
parent.botFrame.history.go(-1);setTimeout('verifica()',40)}
 
function verifica()
{
/*Questa soluzione perche' senza script firmati per ragioni di
sicurezza non si possono confrontare current con previous*/
presente=parent.botFrame.location.href;
if (precedente==presente)
{parent.topFrame.location.replace(main_top.htm)}}  
/*che vuol dire: se dopo aver provato ad arretrare in botFrame (e ti
do 40ms per far si che il prametro "presente" sia correttamente
settato sull'eventuale nuova url)  l'url della pagina non è cambiata
allora arretra su topFrame
o meglio sostituisci in topFrame la pagina che mi serve:
 Netscape accetterebbe al posto del replace
parent.topFrame.history.go(-1) ma
IE legge la lunghezza dell' History di questo frame in modo dissimile
e non arretra)
 */
</script>
<form>
<input type=button onClick=indietro()>
<form>
ti funziona?
Ciao

Ciao
Il problema si è ridotto a questo:
da topFrame richiamo la funzione
function indietro(){
parent.botFrame.history.go(-1);
location.href="main_top.htm";
}
la quale assolve il primo compito, cioe' fa tornare indietro la pagina in
botFrame (quella inferiore) ma non riesce a ricaricare la nuova pagina
superiore in topFrame.
Per la cronaca ho anche provato con
function indietro(){
parent.botFrame.history.go(-1);
parent.topFrame.history.go(-1);
}
ma non funziona ugualmente.
Sembra quasi che una volta eseguito il primo comando, l'azione si sposti
senza completare la funzione.
E' il JS che e' strano o io che non ci ho capito nulla?
Ciao,
            Giorgio


Non è previsto che si navighi in botFrame e quindi, seguendo il tuo
suggerimento (che spero di aver capito bene) la mia funzione diventa
semplicemente
function indietro(){
parent.botFrame.history.go(-1);
parent.topFrame.location.replace("main_top.htm");
}
Pero', purtroppo, il problema rimane identico: torna indietro botFrame ma
topFrame non ne vuole sapere di cambiare.
Non conoscendo la sintassi del replace ho anche provato le varianti
(main_top.htm) e ('main_top.htm') ma non credo che il problema sia li!
Prevedo una nottata insonne o popolata da incubi con molti, molti frames!
Ciao,    Giorgio





topFrame non ne vuole sapere di cambiare.
strano l' ho proprosto dopo averlo provato in locale e in linea.
se gli chiedi di mostrarti il nome del frame neghittoso e l'url con un
alert come sotto ottieni i nomi che ti aspetti?
function indietro(){
parent.botFrame.history.go(-1);
alert(
self.name
+"
"+location.href);parent.topFrame.location.replace("bubu2.htm");//tutto
su una riga questo ovviamente
}

Il problema si č ridotto a questo:





Non è previsto che si navighi in botFrame e quindi, seguendo il tuo
suggerimento (che spero di aver capito bene) la mia funzione diventa
semplicemente
function indietro(){
parent.botFrame.history.go(-1);
parent.topFrame.location.replace("main_top.htm");
}
Pero', purtroppo, il problema rimane identico: torna indietro botFrame ma
topFrame non ne vuole sapere di cambiare.


ACCIDENTI all'OUTLOOK!!
Scusatemi per la ripetizione dei messaggi.
C'e' un modo per cancellarli ?
Giorgio

 BACK che deve essere relativo a tutto rightFrame.
Isolando solo questa frase da tutto il resto ti chiedo:
perché non fare:
top.frames["nome_frame_dx"].location.href="situazionedipartenza"?
Cioè tornare alla situazione iniziale?
Ciao, Riccardo
------------------------------------------------------------------------
WebMaster: ----> 
http://www.jsdir.com
 <---- (aka 
http://www.jspoint.it
)
------------------------------------------------------------------------
Need a JavaScript password?
http://www.jspoint.it/staffscripts/script021/PazzWordProva/ingresso.html
------------------------------------------------------------------------
"Any sufficientely advanced technology is indistinguishable from magic"
                      Arthur Charles Clarke
------------------------------------------------------------------------


Sarebbe molto bello ma purtroppo la pagina destra a cui devo tornare è
composta da due frames (topFrame e botFRame) e quello inferiore contiene dei
risultati di ricerca ottenuti tramite WhatUSeek (in remote hosting) e non ho
idea di come si possa fare per riottenerla.
Grazie comunque.
Ciao,
        Giorgio

Ho risolto!!
Strano ma vero, il problema non stava certo nella funzione richiamata.
E' bastato scrivere
function indietro(){
parent.topFrame.history.go(-1);
parent.botFrame.history.go(-1);
}
ed a dire il vero, tutte le varianti che mi sono state suggerite erano
perfette a rigor di logica e quindi avrebbero dovuto funzionare.
Il baco era altrove (anche se non me lo so spiegare).
Infatti, io stupidamente richiamavo la funzione indietro() con un javascript
agganciata ad un tag <A> piuttosto che ad un bottone grafico (come avrei
dovuto diligentemente fare) e ciň permettava di eseguire SOLO la prima
istruzione della funzione chiamata saltando a pič pari le successive senza
nemmeno segnalare errori.
Sebbene il problema tecnico sia ormai alle spalle, sarei davvero curioso di
capire il perchč di questo bizzarro comportamento.
In ogni caso, un  grazie a p.carena ed a Riccardo Riccardi per la loro
paziente disponibilitŕ.
A presto,
                Giorgio

 nemmeno segnalare errori.
No, non c'entra assolutamente nulla.
Se chiami delle funzioni in JavaScript queste vengono eseguite e basta, non 
importa come le lanci.
Forse dipende proprio da come hai riscritto la sintassi, che mi sembra sia la 
prima volta che vedo.
