• Moderatore

    Javascript che funzionano soltanto se...

    Sono tre giorni che sto cercando di capire perché alcuni script non mi funzionano.
    Di seguito quanto sono riuscito a capire.

    Nell'head di una pagina ho uno script in questo modo:

    <script async defer src="http://www miosito com/jquery1113.js"></script>
    

    Così da solo non funziona:
    di seguito ci devo aggiungere un altro script.
    Così:

    <script src="non_esiste.js"></script>
    

    L'indirizzo deve essere relativo (non in forma assoluta) e può non esistere il file a cui si riferisce.

    Sapete darmi una spiegazione?


  • User Attivo

    Veramente strano, puoi postare il sorgente della pagina? o una porzione di codice?

    Altro consiglio, salvo determinati casi, io toglierei i parametri

    async e defer

    per lasciare solo

    <script src="tuosito/jquery1113.js"></script>


  • Moderatore

    Ciao Bacca001,
    grazie per il tuo aiuto!

    Avevo provato a togliere quei parametri, ma non era cambiato nulla.
    Per scrupolo, dopo il tuo intervento, ho voluto riprovare e ora tutto funziona regolarmente.
    Evidentemente la prima volta ho sbagliato qualcosa...mha, non mi so dare una spiegazione.

    Sapresti dirmi perché mi hai subito suggerito di togliere async e defer?
    Danno spesso questo genere di problemi?


  • User Attivo

    Magari avevi provato e ti eri dimenticato di salvare, capita spesso anche a me 😄

    Cercherò di darti una spiegazione come meglio riesco:

    Async e defer sono due parametri che in realtà a rigor di logica vanno in conflitto tra di loro, quindi magari va in crisi il browser, ma ti spiego meglio.

    Premettendo che questi parametri funzionano solo per browser che supportano HTML5, devi tener conto che con quest'ultimo puoi decidere(con l'ausilio di questi 2 parametri), quando far eseguire uno script, quindi, consideriamo ed analizziamo queste 3 probabilità:

    <script src="mioscript.js"></script>
    

    In questo primo caso(quindi senza parametri) il browser caricherà ed eseguirà lo script subito prima di renderizzare tutto ciò che si trova sotto questo tag.

    <script async src="mioscript.js"></script>
    

    Con "async" (asincrono) invece, il browser continua a caricare l'HTML e a renderizzarlo mentre il browser carica ed esegue lo script contemporaneamente.

    <script defer src="mioscript.js"></script>
    

    Con "defer" (rinvio) invece, il browser eseguirà lo script quando ha finito il parsing della pagina.

    Quindi puoi dedurre da solo che async e defer sono circa gli opposti, e magari andava in crisi il browser, oppure non capiva cosa fare 🙂

    Però mi hai anche detto che alcune volte andava, e questo non avveniva come pensi tu grazie allo script "fantasma" che inserivi, ma bensì molto probabilmente(non ne sono certo, bisognerebbe verificare), perchè al primo caricamento lo scaricava troppo lentamente rispetto al load della pagina, e al refresh della pagina era già disponibile(cache), e quindi funzionava per forza di cose 🙂

    Se vuoi proprio verificare fai un controllo di pesantezza della pagina al primo caricamento(chiaramente dopo aver svuotato le cache così da riscaricarsi il js remoto), poi una seconda volta dopo aver caricato la prima volta, se la seconda volta è più leggera molto probabilmente hai risolto il rompicapo 🙂

    Spero di essere stato chiaro ed esaustivo se hai qualche dubbio chiedi pure 🙂