Newsgroup: it.comp.www.html
Titolo: Problema "frames" per geni

Ho un problema che mi sembra difficile finanche da spiegare ...
Sto facendo un ipertesto. Supponiamo che sia diviso dal punto di vista
logico in "capitoli".
La mia pagina contiene due frames: nel primo (framesomm) vi è il sommario
del capitolo che sto consultando (ad es. "\cap1\somm.htm"), nel secondo
(framemain) vi è il testo (ad es. "cap1\file1.htm").
Supponiamo che nel testo di file1.htm vi sia un link a un file del cap 2, e
magari a un segnalibro ("\cap2\file2.htm#segna1"). Esiste il modo per far sì
che "framesomm" si accorga che il file in "framemain" è cambiato e carichi
l'opportuno sommario, ossia "\cap2\somm.htm"?
Vi ringrazio per la vostra applicazione a questo rompicapo.
Approfitto per ringraziare gli "illuminatori" che rispondendo a messaggi di
altri hanno "formato anche me.
"in questo momento l'universo"
Giuseppe "Peo" Scaglione

l'opportuno sommario, ossia "\cap2\somm.htm"?
Potresti, nel link dentro file1.htm, mettere il collegamento alla pagina che
ti interessa e al sommario giusto, ognuno nel suo frame, con un piccolo
javascript.
ciao
gelty
----------
visita 
http://www.sifor.it
elimina *toglimi.* per le risposte

 l'opportuno sommario, ossia "\cap2\somm.htm"?
Prima soluzione: con Javascript, semplice, ma non sempre funziona.
Nel link si cambia il sommario con l'evento onclick:
-- cap1/file1.html
  <A target="_self" href="../cap2/...." 
     onclick="top.framesomm.location='info.html';">testo del link</A>
Questo funziona solo se il browser supporta Javascript e l'utente non
l'ha disabilitato. La pagina del secondo capitolo viene caricata sempre,
ma nei browser senza Javascirpt il sommario rimane quello del primo
capitolo.
In generale non e' una buona idea usare Javascript per la navigazione,
pero' in questo caso, se e' accettabile che non sempre venga aggioranto
il sommario, la soluzione con JS puo' andare bene.
Per una soluzione in HTML, piu' portabile, le cose si complicano.
Il problema e' che una pagina composta da vari frame, a differenza di
una pagina normale, non sempre ha un URL.
Se la combinazione di frame e' quella originale specificata nel tag 
FRAMESET, l'URL esiste ed e' quella del file contenente il frameset.
Se la pagina e' stata ottenuta cambiando qualche frame (per esempio 
usando i link del sommario) non ha piu' una sua URL. Ogni frame ha la
sua URL, ma la combinazione di frame no.
Questo e' uno dei motivi per cui molti esperti consigliano di non usare
mai i frame.
E' quindi necessario che, per ogni combinazione di frame che puo' essere
destinazione di un link, ci sia un file con il frameset giusto.
Se tutti i link fanno riferimento all'inizio del capitolo, questo non e' 
un grosso problema: molto probabilente ci sara' gia' un frameset per
ogni capitolo e un sommario generale con un link per ogni capitolo.
Se i link sono sparsi per tutto il capitolo, le cose si complicano:
bisogna aggiungere un file per  ogni destinazione. Se, per esempio, c'e'
un link a cap2/sez4.html#par5, si ha:
-- cap2/sez4_par5.html  (nuovo)
  ...
  <FRAMESET ...>
    <FRAME name="sommario" src="sommario.html">
    <FRAME name="main" src="sez4.html#par5">
    <NOFRAMES>
       E adesso? Ci puo' stare un link a "sez4.html#par5", pero'
       diventa scomodo seguire ogni volta 2 link al posto di uno.
    </NOFRAMES>
  </FRAMESET>
e il link va cambiato e fatto puntare al nuovo file:
-- cap1/...
  <A target="_top" href="../cap2/sez4_par5.html> ... </A>
Questo complica ulteriormente il problema.
Alcuni browser non supportano i frame, o comunque permettono di 
disabilitarli, quindi bisogna che il documento sia accessibile
anche senza frame. Nella versione originale era semplice: il
testo andava bene sia con i frame che senza, bastava ripetere
il sommario nella sezione NOFRAMES del file principale del
capitolo. Adesso invece c'e' bisogno di due versioni distinte.
Un'altra possibilita' e' quella di usare la prima soluzione
(Javascript) e aggiungere all'inizio e alla fine di ogni capitolo
(o di ogni file del capitolo se e' diviso in piu' file) un link
al sommario giusto:
  <A target="sommario" href="sommario.html">Sommario del capitolo</A>
Questo e' utile a chi non ha JS e/o frame abilitati. Quando pero'
si segue un link che porta a meta' di un altro capitolo, il sommario
rimane vecchio e il link non si vede. 
Un altro difetto di questa soluzione e' che, quando il browser
supporta sia i frame che JS, il link non ha effetto (carica una
pagina che c'e' gia'), e un link che non cambia niente non fa mai
una buona impressione.
La soluzione piu' semplice rimane sempre quella di rinunciare ai frame
e mettere l'indice di ongi capitolo all'inizio del capitolo.
	Mauro

 "\cap2\somm.htm"?
Basta fare un link ad un nuovo frameset (con target="_top" e mantenendo 
nomi uguali per i due frames) che abbia il sommario del nuovo capitolo e la 
pagina particolare che ti serve. Semplice html senza javascript. Questo ti 
obbliga a fare un frameset diverso per ogni link ad un capitolo esterno pero' 
e' codice pulito che andra' bene in ogni browser (tranne gli antidiluviani 
senza frames, ma avendo impostato tutto il sito sui frames non credo che 
questo sia un problema)
Ciao
Roberto
______________________________________________________
CapriWeb : Appunti e Foto
dall' Isola di Capri e dal Golfo di Napoli
http://www.capriweb.com/indice.html
______________________________________________________
--
Posted from 
ro...@www.capri.it
 [194.185.85.66]
via Mailgate.ORG Server - 
http://www.mailgate.org

Altra idea, sempre con js: potresti mettere all'inizio di ogni pagina
capitolo un controllo per vedere se il sommario corrisponde e se del caso
caricarlo.


Se hai un frame chiamato "framesomm" e un altro frame chiamato "framemain",
e
vuoi che un LINK (su framemain) modifichi il contenuto dei 2 diversi frames
allora penso che possa adattarsi al tuo caso la funzione Javascript che
segue.
In framesomm vuoi vedere il file "fsomm2.html" mentre in framemain il file
"fmain2.html#segnalibro" contemporaneamente (in definitiva se è questo ciò
che volevi non era poi così assurdo, o no?).
_____________Funzione JavaScript_____________
<HEAD>
<SCRIPT LANGUAGE="javascript">
   <!--
   function comevuoi(docframesomm,docframemain)
   {
      var
      parent.framesomm.location = docframesomm;
      parent.framemain.location = docframemain;
   }
   //-->
</SCRIPT>
</HEAD>
________________________________________
Il link nel frame FMAIN  (cioè nel documento fmain1.html) devi riportare la
seguente sintassi:
<A HREF="fmain2.html#segnalibro" OnClick="comevuoi
("fsomm2.html","fmain2.html#segnalibro" );">link al capitolo e pagina
voluto</A>
E' chiaro che se hai più di un frame aperto e vuoi cambiare i contenuti di
2,3,4,...n frames basta che tu aggiunga:
parent.NOME_FRAME.location = "nome_file.html"    per ogni altro frame.
Non l'ho provato, testalo, ma dovrebbe funzionare.
Antonio M.