Experimentalia

Appunti raminghi

Quando Firefox esegue due volte lo stesso script

with 4 comments

Promemoria:

Tutto un pomeriggio perso dietro ad un problema che, al giorno d’oggi, non dovrebbe neanche porsi:

No, non sto criticando Firefox, sto criticando me stesso che mi atteggio ad essere uno pseudoprogrammatore. Analisi dei flussi, pattern, programmazione agile (magari) e poi mi perdo in un bicchier d’acqua.

Mi è capitato che un banale script:

<script type="text/javascript" >
//<!--
var stats = "toolbar=no, location=no, directories=no, "
    stats +="status=yes, menubar=no, scrollbars=no, top=0, "
    stats +="resizable=no, width=1100, height=678, left=0";
window.open("indexFraming.php", "", stats);
window.opener=self;
self.close();
//-->
</script>

Venisse eseguito due volte da Firefox ed una volta sola da Internet Explorer 6. Non ho testato altri browser per mancanza di tempo e voglia. Chi volesse integrare con commenti è, al solito, benvenuto.

Racchiudere il codice all’interno di una funzione, anche anonima, ed eseguirlo al termine del caricamento della pagina, risolve il problema.

<script type="text/javascript" >
//<!--
window.onload=function () {
   var stats =  "toolbar=no, location=no, directories=no, "
       stats += "status=yes, menubar=no, scrollbars=no, top=0, "
       stats += "resizable=no, width=1100, height=678, left=0";
window.open("indexFraming.php", "", stats);
window.opener=self;
self.close();
}
//-->
</script>

E questo è tutto.

Written by Eineki

luglio 14, 2008 a 18:07 pm

4 Risposte

Subscribe to comments with RSS.

  1. per eliminare il problema (che confermo presentarsi con Firefox e non con IE) e’ possibile operare anche inserendo nel tag head:

    e Firefox torna ad eseguire una sola volta lo script.

    Dino Bortolotto

    agosto 22, 2008 at 16:44 pm

  2. @Dino
    Ciao, immagino che il filtro abbia eliminato una parte rilevante del tuo commento. Potresti, nel caso, reinserirlo o aggiungere la parte mancante?

    Se, invece, stai suggerendo di inserire lo script nel tag head bisogna tener conto del fatto che, mentre il browser elabora il contenuto del tag head, il dom non è stato ancora costruito e quindi uno script inserito all’interno di questo tag non può fare riferimento agli elementi della pagina che devono ancora essere renderizzati.

    eineki

    agosto 23, 2008 at 2:12 am

  3. Ciao, effettivamente il filtro ha tagliato il tag meta che suggerivo di inserire all’interno del tag head … lo riscrivo sotto usando “<” e “>” per evitare il filtro:

    <meta http-equiv=”Content-Type” content=”text/html; charset=UTF-8″ >

    Ieri con un mio collega (Luca) abbiamo analizzato meglio il problema ed abbiamo capito che il tutto nasce dal fatto che, se il charset non e’ dichiarato esplicitamente, Firefox assume, per il testo che sta “leggendo”, un certo charset e quando poi incontra un carattere (esempio una lettera accentata) non coerente con la sua assunzione iniziale a quel punto ri-setta il charset e rilegge il testo dall’inizio ed ecco il perche’ della doppia esecuzione (sta ri-leggendo anche lo script) ed ecco perche’ inserire il tag meta con l’indicazione esplicita del charset corretto evita la doppia esecuzione dello script.
    con molta probabilita’ il tuo problema non era nello script ma in un qualche commento dello script o del testo html

    Saluti
    Dino

    Dino Bortolotto

    agosto 23, 2008 at 15:01 pm

  4. Ho verificato ed effettivamente basta specificare un qualunque charset, anche solo da header http, ed il problema non si presenta.

    Il problema non si presenta neanche se il charset specificato è errato, ho provato ad impostare ISO-8859-15 inviando caratteri UTF-8 e tutto è andato per il meglio.

    Grazie ancora per la dritta

    eineki

    agosto 24, 2008 at 13:40 pm


Lascia un commento

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...

%d blogger cliccano Mi Piace per questo: