Valutazione 4.87/ 5 (100.00%) 5838 voti

Condividi:        

Adattare javascript per FireFox

Problemi di HTML? Di PHP, ASP, .NET, JSP, Perl, SQL, JavaScript, Visual Basic..?
Vuoi realizzare programmi in C, C++, Java, Ruby o Smalltalk, e non sai da che parte cominciare?
Entra qui e troverai le risposte!

Moderatori: Triumph Of Steel, archimede

Adattare javascript per FireFox

Postdi Swalke » 27/08/05 09:10

Ciao tutti!
Ho un javascript che crea un menù in stile explora risorse.

Attualmente funziona su Explorer e Opera.

Volevo sapere se, postando il codice, qualcuno mi sa dire se è possibile farlo girare anche sotto FireFox... ...e che modifiche devo fare.

Il codice non è molto lungo...

Resto inb attesa!

Grazie!
Avatar utente
Swalke
Hardware Admin
 
Post: 820
Iscritto il: 26/10/01 01:00
Località: Milano

Sponsor
 

Postdi archimede » 27/08/05 09:55

Immagino dipenda da quanto è complesso il codice.

Alessandro
archimede
Moderatore
 
Post: 2755
Iscritto il: 07/11/02 12:41
Località: Genova

Postdi Swalke » 27/08/05 10:51

...il codice non mi sembra sia molto complesso.
Credo che comunque alla fine si tratti di identificare e sostituire quegli "oggetti" che su firefox non vanno (sempre che la cosa sia fattibile).

La pagina html richiama la funzione "disegna" e nella pagina includo i 2 file js seguenti:

PRIMO FILE:
Codice: Seleziona tutto
var nascosto=new Array();
for (c=1;c<=i;c++){
   if(elemento[c].livello==1) nascosto[c]=false;
   else nascosto[c]=true;
}

function disegna(){
   var index=0;
   var code='';
   code += '<TABLE BORDER=0><TR><TD NOWRAP>';
   for(c=2;c<=i;c++){
      index=index+1;
      if(!nascosto[c]){
         var app=elemento[c];
         for(k=2;k<=app.livello;k++) code += '<IMG SRC="i.gif" ALIGN="left" BORDER=0>';
         if(app.foglia){
            if(c!=i && app.livello==elemento[c+1].livello) code += '<IMG SRC="t.gif" ALIGN="left" BORDER=0>';
            else code += '<IMG SRC="l.gif" ALIGN="left" BORDER=0>';
            if(app.icona=='') app.icona='html.jpg';
            code += '<A HREF="'+app.link+'" TARGET="_parent" onmouseover="setObj(des['+index+'],\'override\',400,110)"  onmouseout="clearTimeout(openTimer);stopIt()">';
            code += '<IMG SRC="'+app.icona+'" ALIGN="left" BORDER=0>&nbsp;';
            code +='<font style="FONT-SIZE: 10px; ">'+app.nome+'</font></A><BR>';
         }
         else{
            if(nascosto[c+1]){
               code += '<A HREF="javascript: apri('+c+')"><IMG SRC="cartella1.jpg" ALIGN="left" BORDER=0></A>&nbsp;';
               code += '<A HREF="javascript: apri('+c+')"><b><font style="FONT-SIZE: 10px; ">'+app.nome+'</font></b></A><BR>';
            }
            else{
               code += '<A HREF="javascript: chiudi('+c+')"><IMG SRC="cartella2.jpg" ALIGN="left" BORDER=0></A>&nbsp;';
               code += '<A HREF="javascript: chiudi('+c+')"><b><font style="FONT-SIZE: 10px;">'+app.nome+'</font></b></A><BR>';
            }
         }
      }
   }
   code += '</TD></TR></TABLE>';
   if(document.all) esplora.innerHTML=code;
   else{
      document.layers.esplora_nn.document.open();
      document.layers.esplora_nn.document.write(code);
      document.layers.esplora_nn.document.close();
   }
}
function apri(n){
   var c=n+1;
   while(elemento[c].livello>elemento[n].livello) c++;
   for(k=n+1;k<c;k++) if(elemento[k].livello==elemento[n].livello+1) nascosto[k]=false;
   disegna();
}

function chiudi(n){
   var c=n+1;
   while(elemento[c].livello>elemento[n].livello) c++;
   for(k=n+1;k<c;k++) nascosto[k]=true;
   disegna();
}


SECONDO FILE:
Codice: Seleziona tutto
function voce(livello,nome,link,icona,foglia) {
  this.livello = livello;
  this.nome = nome;
  this.link = link;
  this.icona = icona;
  this.foglia = foglia;
}
var elemento = new Array()
var i = 0;
elemento[++i] = new voce(0,'Home Page','home.htm','',true);
elemento[++i] = new voce(1,'Acquisti on-line','','',false);
   elemento[++i] = new voce(2,'CHL','http://www.chl.it','', true);
   elemento[++i] = new voce(2,'Ebay','http://www.ebay.it','',true);
elemento[++i] = new voce(1,'Cellulari','','',false);
   elemento[++i] = new voce(2,'CDcovers','http://www.cdcovers.cc/mobile.php','', true);
elemento[++i] = new voce(1,'Cultura','','',false);
   elemento[++i] = new voce(2,'BeppeGrillo','http://www.beppegrillo.it','', true);
   elemento[++i] = new voce(2,'Wikipedia','http://it.wikipedia.org','', true);
elemento[++i] = new voce(1,'Giochi di ruolo e da tavolo','','',false);
   elemento[++i] = new voce(2,'Confrontation','http://www.confrontation.fr','', true);
   elemento[++i] = new voce(2,'Wargamesfoundry','http://www.wargamesfoundry.com/main.asp','', true);
elemento[++i] = new voce(1,'Manga & cartoni','','', false);
      elemento[++i] = new voce(2,'Anigate','http://forum.anigate.net','', true);
elemento[++i] = new voce(0,'','','mail.jpg',true);


Fammi sapere!
Avatar utente
Swalke
Hardware Admin
 
Post: 820
Iscritto il: 26/10/01 01:00
Località: Milano

Postdi archimede » 27/08/05 11:49

Tutto qui? Forse serve anche una pagina di esempio, giacché il codice proposto mi dà errore con IE6 ('esplora' non è definito)...

Alessandro

[Edit]Come non detto: non dà errore (avevo invertito l'ordine dei due file), ma mi dà pagina bianca.
archimede
Moderatore
 
Post: 2755
Iscritto il: 07/11/02 12:41
Località: Genova

Postdi Swalke » 27/08/05 11:55

Credo che ti da pagina bianca perchè non hai messo un id esplora nella pagina!

Prova a mettere una tabella con questa cella!

Codice: Seleziona tutto
<TD width="190" align="left" valign="top"><DIV ID="esplora"></DIV></TD>


Credo che così dovresti vedere qualcosa![/code]
Avatar utente
Swalke
Hardware Admin
 
Post: 820
Iscritto il: 26/10/01 01:00
Località: Milano

Postdi archimede » 27/08/05 11:59

Niente da fare. Questa è la mia pagina completa:
Codice: Seleziona tutto
<SCRIPT LANGUAGE="javascript">
<!--//
var nascosto=new Array();
for (c=1;c<=i;c++){
   if(elemento[c].livello==1) nascosto[c]=false;
   else nascosto[c]=true;
}

function disegna(){
   var index=0;
   var code='';
   code += '<TABLE BORDER=0><TR><TD NOWRAP>';
   for(c=2;c<=i;c++){
      index=index+1;
      if(!nascosto[c]){
         var app=elemento[c];
         for(k=2;k<=app.livello;k++) code += '<IMG SRC="i.gif" ALIGN="left" BORDER=0>';
         if(app.foglia){
            if(c!=i && app.livello==elemento[c+1].livello) code += '<IMG SRC="t.gif" ALIGN="left" BORDER=0>';
            else code += '<IMG SRC="l.gif" ALIGN="left" BORDER=0>';
            if(app.icona=='') app.icona='html.jpg';
            code += '<A HREF="'+app.link+'" TARGET="_parent" onmouseover="setObj(des['+index+'],\'override\',400,110)"  onmouseout="clearTimeout(openTimer);stopIt()">';
            code += '<IMG SRC="'+app.icona+'" ALIGN="left" BORDER=0>&nbsp;';
            code +='<font style="FONT-SIZE: 10px; ">'+app.nome+'</font></A><BR>';
         }
         else{
            if(nascosto[c+1]){
               code += '<A HREF="javascript: apri('+c+')"><IMG SRC="cartella1.jpg" ALIGN="left" BORDER=0></A>&nbsp;';
               code += '<A HREF="javascript: apri('+c+')"><b><font style="FONT-SIZE: 10px; ">'+app.nome+'</font></b></A><BR>';
            }
            else{
               code += '<A HREF="javascript: chiudi('+c+')"><IMG SRC="cartella2.jpg" ALIGN="left" BORDER=0></A>&nbsp;';
               code += '<A HREF="javascript: chiudi('+c+')"><b><font style="FONT-SIZE: 10px;">'+app.nome+'</font></b></A><BR>';
            }
         }
      }
   }
   code += '</TD></TR></TABLE>';
   if(document.all) esplora.innerHTML=code;
   else{
      document.layers.esplora_nn.document.open();
      document.layers.esplora_nn.document.write(code);
      document.layers.esplora_nn.document.close();
   }
}
function apri(n){
   var c=n+1;
   while(elemento[c].livello>elemento[n].livello) c++;
   for(k=n+1;k<c;k++) if(elemento[k].livello==elemento[n].livello+1) nascosto[k]=false;
   disegna();
}

function chiudi(n){
   var c=n+1;
   while(elemento[c].livello>elemento[n].livello) c++;
   for(k=n+1;k<c;k++) nascosto[k]=true;
   disegna();
}

function voce(livello,nome,link,icona,foglia) {
  this.livello = livello;
  this.nome = nome;
  this.link = link;
  this.icona = icona;
  this.foglia = foglia;
}

var elemento = new Array()
var i = 0;
elemento[++i] = new voce(0,'Home Page','home.htm','',true);
elemento[++i] = new voce(1,'Acquisti on-line','','',false);
   elemento[++i] = new voce(2,'CHL','http://www.chl.it','', true);
   elemento[++i] = new voce(2,'Ebay','http://www.ebay.it','',true);
elemento[++i] = new voce(1,'Cellulari','','',false);
   elemento[++i] = new voce(2,'CDcovers','http://www.cdcovers.cc/mobile.php','', true);
elemento[++i] = new voce(1,'Cultura','','',false);
   elemento[++i] = new voce(2,'BeppeGrillo','http://www.beppegrillo.it','', true);
   elemento[++i] = new voce(2,'Wikipedia','http://it.wikipedia.org','', true);
elemento[++i] = new voce(1,'Giochi di ruolo e da tavolo','','',false);
   elemento[++i] = new voce(2,'Confrontation','http://www.confrontation.fr','', true);
   elemento[++i] = new voce(2,'Wargamesfoundry','http://www.wargamesfoundry.com/main.asp','', true);
elemento[++i] = new voce(1,'Manga & cartoni','','', false);
      elemento[++i] = new voce(2,'Anigate','http://forum.anigate.net','', true);
elemento[++i] = new voce(0,'','','mail.jpg',true);
disegna();
//-->
</SCRIPT>
<TD width="190" align="left" valign="top"><DIV ID="esplora"></DIV></TD>
Alessandro

[Edit]OK, ora va in IE6.

[Edit2]Contrordine: mancano dei pezzi (ClearTimeout, Stopit, des e non so che altro). Fai una bella cosa: costruisci tu una pagina che funziona e che contiene tutto, poi la posti.
archimede
Moderatore
 
Post: 2755
Iscritto il: 07/11/02 12:41
Località: Genova

Postdi Swalke » 27/08/05 13:02

Ok.
Ti posto i 3 file per intero:

File "disegnomenu.js"
Codice: Seleziona tutto
var nascosto=new Array();
for (c=1;c<=i;c++){
   if(elemento[c].livello==1) nascosto[c]=false;
   else nascosto[c]=true;
}

function disegna(){
   var index=0;
   var code='';
   code += '<TABLE BORDER=0><TR><TD NOWRAP>';
   for(c=2;c<=i;c++){
      index=index+1;
      if(!nascosto[c]){
         var app=elemento[c];
         for(k=2;k<=app.livello;k++) code += '<IMG SRC="i.gif" ALIGN="left" BORDER=0>';
         if(app.foglia){
            if(c!=i && app.livello==elemento[c+1].livello) code += '<IMG SRC="t.gif" ALIGN="left" BORDER=0>';
            else code += '<IMG SRC="l.gif" ALIGN="left" BORDER=0>';
            if(app.icona=='') app.icona='html.jpg';
            code += '<A HREF="'+app.link+'" TARGET="_parent" onmouseover="setObj(des['+index+'],\'override\',400,110)"  onmouseout="clearTimeout(openTimer);stopIt()">';
            code += '<IMG SRC="'+app.icona+'" ALIGN="left" BORDER=0>&nbsp;';
            code +='<font style="FONT-SIZE: 10px; ">'+app.nome+'</font></A><BR>';
         }
         else{
            if(nascosto[c+1]){
               code += '<A HREF="javascript: apri('+c+')"><IMG SRC="cartella1.jpg" ALIGN="left" BORDER=0></A>&nbsp;';
               code += '<A HREF="javascript: apri('+c+')"><b><font style="FONT-SIZE: 10px; ">'+app.nome+'</font></b></A><BR>';
            }
            else{
               code += '<A HREF="javascript: chiudi('+c+')"><IMG SRC="cartella2.jpg" ALIGN="left" BORDER=0></A>&nbsp;';
               code += '<A HREF="javascript: chiudi('+c+')"><b><font style="FONT-SIZE: 10px;">'+app.nome+'</font></b></A><BR>';
            }
         }
      }
   }
   code += '</TD></TR></TABLE>';
   if(document.all) esplora.innerHTML=code;
   else{
      document.layers.esplora_nn.document.open();
      document.layers.esplora_nn.document.write(code);
      document.layers.esplora_nn.document.close();
   }

}
function apri(n){
   var c=n+1;
   while(elemento[c].livello>elemento[n].livello) c++;
   for(k=n+1;k<c;k++) if(elemento[k].livello==elemento[n].livello+1) nascosto[k]=false;
   disegna();
}

function chiudi(n){
   var c=n+1;
   while(elemento[c].livello>elemento[n].livello) c++;
   for(k=n+1;k<c;k++) nascosto[k]=true;
   disegna();
}


File "menu.js"
Codice: Seleziona tutto
function voce(livello,nome,link,icona,foglia) {
  this.livello = livello;
  this.nome = nome;
  this.link = link;
  this.icona = icona;
  this.foglia = foglia;
}
var elemento = new Array()
var i = 0;
elemento[++i] = new voce(0,'Home Page','home.htm','',true);
elemento[++i] = new voce(1,'Acquisti on-line','','',false);
   elemento[++i] = new voce(2,'CHL','http://www.chl.it','', true);
   elemento[++i] = new voce(2,'Ebay','http://www.ebay.it','',true);
elemento[++i] = new voce(1,'Cellulari','','',false);
   elemento[++i] = new voce(2,'CDcovers','http://www.cdcovers.cc/mobile.php','', true);
elemento[++i] = new voce(1,'Cultura','','',false);
   elemento[++i] = new voce(2,'BeppeGrillo','http://www.beppegrillo.it','', true);
   elemento[++i] = new voce(2,'Wikipedia','http://it.wikipedia.org','', true);
elemento[++i] = new voce(1,'Giochi di ruolo e da tavolo','','',false);
   elemento[++i] = new voce(2,'Confrontation','http://www.confrontation.fr','', true);
   elemento[++i] = new voce(2,'Wargamesfoundry','http://www.wargamesfoundry.com/main.asp','', true);

  elemento[++i] = new voce(1,'Manga & cartoni','','', false);
      elemento[++i] = new voce(2,'Anigate','http://forum.anigate.net','', true);
elemento[++i] = new voce(0,'','','mail.jpg',true);


File "Prova.htm"
Codice: Seleziona tutto
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Prova</title>
</head>

<body ONLOAD="disegna()" >
<SCRIPT LANGUAGE=JavaScript SRC="menu.js"></SCRIPT><SCRIPT LANGUAGE=JavaScript SRC="disegnomenu.js"></SCRIPT><script type="text/javascript" SRC="linkdescriptor.js"></script>

<table><tr><TD width="190" align="left" valign="top"><DIV ID="esplora"></DIV></TD></tr></table>
</body>
</html>
Avatar utente
Swalke
Hardware Admin
 
Post: 820
Iscritto il: 26/10/01 01:00
Località: Milano

Postdi archimede » 27/08/05 13:26

E linkdescriptor.js? E ClearTimeout? E Stopit? E des? E ...?

Devo dedurre che non si tratta di un tuo parto: forse fai prima a verificare alla fonte se esiste una versione compatibile con FF... anche perchè ci stiamo sempre più allontanando dallo scenario prospettato inizialmente (Il codice non è molto lungo).

Alessandro
archimede
Moderatore
 
Post: 2755
Iscritto il: 07/11/02 12:41
Località: Genova

Postdi Swalke » 27/08/05 13:33

linkdescriptor.js
l'ho lasciato per sbaglio, toglilo! Non centra nulla!

Il codice l'ho trovato su web e io l'ho solo riadattato un pochino.
Le altre cose che dice oltre a linkdescriptor.js le ho trovate già così!

Il codice non mi pare lungo :eeh:

A me così su explorer funziona!
Avatar utente
Swalke
Hardware Admin
 
Post: 820
Iscritto il: 26/10/01 01:00
Località: Milano

Postdi archimede » 27/08/05 13:36

Swalke ha scritto:Il codice non mi pare lungo :eeh:
Se è tutto lì, no.
Swalke ha scritto:A me così su explorer funziona!
A me no (nè vedo come potrebbe, visto che mancano dei pezzi): un link?

Alessandro
archimede
Moderatore
 
Post: 2755
Iscritto il: 07/11/02 12:41
Località: Genova

Postdi Swalke » 27/08/05 19:26

Non capisco... ...mi sembra di non avere fatto errori. :-?

Comunque si, il codice è tutto li.

Ti lascio il link della pagina:
http://www.freeordie.it/prova/prova.htm

E qui ho messo un file zip che contiene oltre al codice che ho già posato (la pagina html e i due js), anche le immagini che servono per una corretta visualizzazione.
http://www.freeordie.it/prova/prova.zip

Spero davvero che tu mi sappia dire qualcosa!
Avatar utente
Swalke
Hardware Admin
 
Post: 820
Iscritto il: 26/10/01 01:00
Località: Milano

Postdi Dylan666 » 28/08/05 00:57

Avatar utente
Dylan666
Moderatore
 
Post: 38040
Iscritto il: 18/11/03 16:46

Postdi Swalke » 28/08/05 14:19

Dylan, grazie per il consiglio, solo che preferirei se qualcuno potesse dirmi come adattare lo script che ho postato io.

Il fatto è che quello che ho postato è solo la porzione (che non funziona su Firefox) di uno script + grande che fa anche altre cose e su cui ho gia' lavorato molto!

...prendere un altro script significherebbe rifare tutto da capo... ...e siccome non sono espertissimo di javascript diventerebbe un lavoro lunghissimo.

Se riuscite a dirmi cosa posso cambiare per far funzionare il mio anche su FireFox ve ne sarei grato!
Avatar utente
Swalke
Hardware Admin
 
Post: 820
Iscritto il: 26/10/01 01:00
Località: Milano

Postdi Dylan666 » 28/08/05 15:07

Firofox dice che l'intoppo è qui:

Codice: Seleziona tutto
Errore: document.layers has no properties
File sorgente: http://www.freeordie.it/prova/disegnomenu.js
Riga: 39
Avatar utente
Dylan666
Moderatore
 
Post: 38040
Iscritto il: 18/11/03 16:46

Postdi Swalke » 28/08/05 15:27

Quindi l'errore è qui:
(metto anche i numeri di riga)

Codice: Seleziona tutto
37     if(document.all) esplora.innerHTML=code;
38     else{
39        document.layers.esplora_nn.document.open();
40        document.layers.esplora_nn.document.write(code);
41        document.layers.esplora_nn.document.close();
42     }


Perchè in explorer funziona?
...posso aggiustare anche per Firefox?
Avatar utente
Swalke
Hardware Admin
 
Post: 820
Iscritto il: 26/10/01 01:00
Località: Milano

Postdi Dylan666 » 28/08/05 15:46

1) non è detto che la segnalazione sia esatta, i debug sono procedimenti molto delicati

2) non ho la più pallida idea di come mettere mano a quel javascript
Avatar utente
Dylan666
Moderatore
 
Post: 38040
Iscritto il: 18/11/03 16:46

Postdi Swalke » 28/08/05 15:53

...partendo dal presupposto che lo script è giusto perchè su explorer gira, credo che il debug ci stia dicendo che Firefox non supporta uno degli oggetti della riga 39.

Nessuno sa dirmi se è così?
Avatar utente
Swalke
Hardware Admin
 
Post: 820
Iscritto il: 26/10/01 01:00
Località: Milano

Postdi Dylan666 » 28/08/05 16:06

Personalmente posso solo suggerirti di spulciare la documentazione circa le varie parti di codice che utilizzi:

http://www.mozilla.org/editor/ie2midas.html

http://devedge-temp.mozilla.org/library ... ml#1193842
Avatar utente
Dylan666
Moderatore
 
Post: 38040
Iscritto il: 18/11/03 16:46

Postdi Swalke » 28/08/05 16:10

Grazie! Farò un po' di prove!
Avatar utente
Swalke
Hardware Admin
 
Post: 820
Iscritto il: 26/10/01 01:00
Località: Milano

Postdi Mone » 28/08/05 20:46

Codice: Seleziona tutto
37     if(document.all) esplora.innerHTML=code;
38     else{
39        document.layers.esplora_nn.document.open();
40        document.layers.esplora_nn.document.write(code);
41        document.layers.esplora_nn.document.close();
42     }


Rieccomi giusto in tempo 8)

Allora, sai collocare nel tempo il tuo script? Credo sia piuttosto vecchio...

Sostituisci la linea 37 così:
Codice: Seleziona tutto
37     if(document.getElementById) esplora.innerHTML=code;


Puntualizziamo, non è FF che sbaglia, ma lo script fittato su 2 componenti non standard del DOM (document.all e document.layers). Così ragionando if(document.all) significa if(Internet Explorer) else sono su netscape quindi uso document.layers, il ragionamento non fila più al giorno d'oggi!
Sostituendo la linea 37 il significato diventa if(ho il DOM standard e quindi anche innerHTML [non esistono a mia conoscnza browser con getElementById e senza innerHTML]) uso innerHTML altrimenti confido che ci sia un Netscape antico.

Se vogliamo portare a perfezione confeziona queste 2 righe così:

Codice: Seleziona tutto
37     if(document.getElementById || document.all) esplora.innerHTML=code;
38     else if(document.layers){


questo perchè sono quasi sicuro esista un IE con innerHTML e document.all ma senza getElementById e il secondo controllo...perchè non si sa mai nella vita :D

Tutto chiaro?
Avatar utente
Mone
Utente Senior
 
Post: 343
Iscritto il: 21/10/03 19:44
Località: Zion

Prossimo

Torna a Programmazione


Topic correlati a "Adattare javascript per FireFox":

Problema con firefox
Autore: Girod
Forum: Software Windows
Risposte: 1

Chi c’è in linea

Visitano il forum: Nessuno e 8 ospiti