Newsgroup: it.comp.lang.javascript
Titolo: non riesco a caricare il frameset :(

è il solito problema, ho un sito con due frames:
telecomando.htm (frame sx)
main.htm (frame dx)
Nel frame "main" vanno le altre pagine interne del sito, che pero' quando
vengono trovate in un motore di ricerca si  caricano da sole e, mancando il
frame di sx con tutti i bottoni per la navigazione, rendono impossibile
l''esplorazione del sito
Il sito è questo 
www.girovagandointrentino.it
Ho provato varie con il codice javascript recuperato su
http://www.html.it/mailing/archivio/22/index.htm
 et siti similari ma non
funziona, o perlomeno non riesco io  a farlo funzionare :(((
Chi mi aiuta?

 Il sito è questo 
www.girovagandointrentino.it
Questo è il tuo frameset:
<frameset cols="226,*" frameborder="NO" border="0" framespacing="0" rows="*" bordercolor="#FF3366">
<frame name="leftFrame" scrolling="NO" noresize src="telecomando.htm" bordercolor="#FF3366" frameborder="0">
<frame name="mainFrame" src="main.htm" frameborder="0" bordercolor="#FFFFFF">
Per rigenerare il frameset nelle pagine contenute in mainFrame, richiama questo script:
if ((self==top)&&(document.layers||document.all||document.getElementById))
{
document.write('<frameset cols="226,*" frameborder="NO" border="0" framespacing="0" rows="*" bordercolor="#FF3366">');
document.write('<frame name="leftFrame" scrolling="NO" noresize src="telecomando.htm" bordercolor="#FF3366" frameborder="0">');
document.write('<frame name="mainFrame" frameborder="0" bordercolor="#FFFFFF" src='+document.location.href+'?a>');
document.write('</frameset>')
}
(l'ho scritto al volo, spero di non aver fatto errori idioti! :D)
La prima riga pone due condizioni per attivare lo script:
1) il frame viene aperto da solo
2) il browser è in grado di capire lo script (non è obsoleto)
Se non t'interessa che la pagina venga letta da browser obsoleti, puoi togliere la 2), e accorciare in: if (self==top)
Poi viene riscritto il frameset,
caricando nel mainFrame il documento corrente (document.location.href).
Il parametro ?a serve a non far ciclare il browser.
Il vantaggio di questo script è che la barra degli indirizzi conserva l'indirizzo del mainFrame,
quindi elimina molti problemi di usabilità causati dai frames.
Lo svantaggio è che, dall'esterno, non funzionano i segnalibri.
MaRoK

 ha scritto nel messaggio
news:bhudd.171583$35.82...@news4.tin.it...

ti ringrazio tantissimo per la risposta, tuttavia la mia conoscenza di java
è zero:
dove e come va inserito precisamente lo script???
Non ci vanno tag di apertura e chiusura? (scusa la domanda scema, ma tu
magari l'hai dato per scontato :))

 magari l'hai dato per scontato :))
Fa' una prova inserendo prima di </head> queste righe:
<script type="text/javascript">
<!--
if ((self==top)&&(document.layers||document.all||document.getElementById)) {
    document.write('<frameset cols="226,*" frameborder="NO" border="0" framespacing="0" rows="*" bordercolor="#FF3366">');
    document.write('<frame name="leftFrame" scrolling="NO" noresize src="telecomando.htm" bordercolor="#FF3366" frameborder="0">');
    document.write('<frame name="mainFrame" frameborder="0" bordercolor="#FFFFFF" src='+document.location.href+'?a>');
    document.write('</frameset>')
}
// -->
</script>
NB: Mi raccomando non andare a capo in mezzo alle righe,
quelle in mezzo devono iniziare con document.write e terminare con ');
Se tutto funziona, nella seconda lezione impareremo a caricare i js esterni!
Fammi sapere
MaRoK

 Fammi sapere
ok attendo istruzioni, grazie!!!! :)

 telecomando.htm e nelle pagine interne?
in tutte le pagine che andranno ad occupare il frame di destra
(quindi non telecomando.htm)
inizia con una, solo per prova.
MaRoK

 ha scritto nel messaggio
news:QNBdd.174206$35.83...@news4.tin.it...

marok grazie, ho provato, ma non va, cioe' carica il framset (telecomando e
main) ma NON la pagina chiamata :(
Cosa devo fare?
<html>
<head>
<title>I LINKS DI GIROVAGANDO IN TRENTINO</title>
<META NAME="robots" CONTENT="INDEX,FOLLOW">
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<link rel="stylesheet" href="css/girovagando_stile.css" type="text/css">
<meta name="Author" content="Alessandro Ghezzer - © Copyright 2001">
<script>
if(
self.name
==
top.name
){
location.href="default.htm"
}
if(top.location.search!='')
{self.location.href=top.location.search.substr(1)}
</script>
<script type="text/javascript">
<!--
if ((self==top)&&(document.layers||document.all||document.getElementById)) {
    document.write('<frameset cols="226,*" frameborder="NO" border="0"
framespacing="0" rows="*" bordercolor="#FF3366">');
    document.write('<frame name="leftFrame" scrolling="NO" noresize
src="telecomando.htm" bordercolor="#FF3366" frameborder="0">');
    document.write('<frame name="mainFrame" frameborder="0"
bordercolor="#FFFFFF" src='+document.location.href+'?a>');
    document.write('</frameset>')
}
// -->
</script>
</head>

 Cosa devo fare?
La prima cosa sbagliata che vedo è la presenza di queste righe:
<script>
if(
self.name
==
top.name
){
location.href="default.htm"
}
if(top.location.search!='')
{self.location.href=top.location.search.substr(1)}
</script>
Non capisco che senso abbiano...
praticamente quando il frame è caricato da solo cancellano tutto
e caricano la pagina "default.htm"... 'na roba veramente urénda.
Cancella queste righe e riprova.
MaRoK

 ha scritto nel messaggio
news:NpTdd.69638$b5.33...@news3.tin.it...

GRANDE!!! FUNZIONA!!! :))
Probabilmente quel codice era il residuo di un vecchio esperimento...
Ora ritesto tutto per il meglio anche on line e ti fo sapere! grazie :)

 Ora ritesto tutto per il meglio anche on line e ti fo sapere! grazie :)
Perfetto.
Ora conviene salvare lo script in un file esterno, da richiamare dalle varie pagine.
Crea un file .js, ad esempio frameset.js, e scrivici dentro SOLO:
if ((self==top)&&(document.layers||document.all||document.getElementById))
{
document.write('<frameset cols="226,*" frameborder="NO" border="0" framespacing="0" rows="*" bordercolor="#FF3366">');
document.write('<frame name="leftFrame" scrolling="NO" noresize src="telecomando.htm" bordercolor="#FF3366" frameborder="0">');
document.write('<frame name="mainFrame" frameborder="0" bordercolor="#FFFFFF" src='+document.location.href+'?a>');
document.write('</frameset>')
}
poi, nelle varie pagine che andranno ad occupare il frame di destra,
scrivi semplicemente:
<script type="text/javascript" src="frameset.js"></script>
prima di </head>
(quindi cancella pure le righe di prima)
MaRoK

 ha scritto nel messaggio
news:eYTdd.69766$b5.33...@news3.tin.it...

aspetta, ho cantato vittoria troppo presto: tutto funziona fino a che il
file è in radice, ma le pagine interne sono in vari subfolders, e quindi
quando tenta di caricare
il telecomando ovviamente non lo trova perché questo sta in radice, e non
nella stessa dir delle pagine interne...
Come risolvo? :)

 > prima di </head>
ho fatto come hai detto, ho messo il file js esterno, funziona con le pagine
in radice.
Resta da risolvere come indicare nelle pagine interne la posizione in radice
del file frameset.js
come fo? grazie :)

 come fo? grazie :)
ci sarebbero molti modi per mantenere il percorso relativo,
tra cui assegnare ad ogni pagina una variabile con la profondità del percorso,
ma fondamentalmente direi chissenefotte! :)
Nello script, cambia telecomando.htm in
http://www.girovagandointrentino.it/telecomando.htm
(se l'indirizzo è quello, se no correggi).
Allo stesso modo, nei files di destra scrivi:
<script type="text/javascript" src="
http://www.girovagandointrentino.it/frameset.js
"></script>
e il problema è risolto.
MaRoK

 e il problema č risolto.
eh magari :(
Ho fatto come hai detto, ma non va :((
questo lo script nel file frameset.js:
if ((self==top)&&(document.layers||document.all||document.getElementById))
{
document.write('<frameset cols="226,*" frameborder="NO" border="0"
framespacing="0" rows="*" bordercolor="#FF3366">');
document.write('<frame name="leftFrame" scrolling="NO" noresize
src="
http://www.girovagandointrentino.it/telecomando.htm
"
bordercolor="#FF3366" frameborder="0">');
document.write('<frame name="mainFrame" frameborder="0"
bordercolor="#FFFFFF" src='+document.location.href+'?a>');
document.write('</frameset>')
}
questa la stringa nei tag head:
<script type="text/javascript"
src="
http://www.girovagandointrentino.it/frameset.js
"></script>
la pagina di prova č:
http://www.girovagandointrentino.it/puntate/2004/autunno/vallagarina/vallagarinaz.htm
che debbo fare?

 Ho fatto come hai detto, ma non va :((
che strano, ora va!!!! GRAZIE!!!!

 che strano, ora va!!!! GRAZIE!!!!
Molti browser sono riluttanti a coinvolgere i .js esterni nei refresh, specie opera.
bisogna insistere per farglieli ricaricare! :)
MaRoK

 ha scritto nel messaggio
news:rHbed.74049$b5.35...@news3.tin.it...

comuqnue GRAZIE, ora funziona tutto, hai la mia riconoscenza sempiterna
:))))

 :))))
ottimo! attendo birra e pheega! :)
MaRoK

 ottimo! attendo birra e pheega! :)
birra ok, "pheega" temo tu debba arrangiarti :))