Visualizzazione dei risultati da 1 a 5 su 5

Discussione: onbeforeunload

  1. #1
    Utente di HTML.it L'avatar di Marcolino's
    Registrato dal
    May 2003
    residenza
    Udine
    Messaggi
    3,606

    onbeforeunload

    Allora, fermo restando che mi sto leggendo ancora i messaggi sul forum relativi a questo evento, sto leggendo molti articoli sul web e tutti mi paiono un po' confusi, o meglio affrettati nel chiudere l'articolo.
    In pratica cosa cerco di fare? Quello che cercando di fare tutti, cioè intercettare l'evento di chiusura del browser.
    Ho letto qui nel forum l'articolo di @pietro_09 che è il più simile a quanto ritrovato sul web anche da me.
    E devo dire che funziona fino allo scatenare dell'evento, cioè, funziona sempre ma non comprendo come si intercetta la procedura di avviso di chiusura.
    Ho fatto delle prove risultato di varie letture e niente, quando si scatena l'evento, pare che si possa solo rispondere si o no, ma comunque se decidi per il no o per il si non c'è modo di intercettarne il risultato.
    In altre parole, quello che voglio realizzare è che alla decisione dell'utente per abbandonare la pagina, possa richiamarsi una routine in cui venga effettuato l'onload, o al limite lo stesso venga mandato in una pagina dove farlo.
    Ma niente, comunque si decida tra sì o no, la routine va in esecuzione.

    Ho anche letto l'articolo di @Alhazred con il problema del tasto F5 che avevo risolto leggendo l'articolo su Eureka che utilizza jquery per il controllo di certi eventi.

    Un semplice esempio di quanto ho realizzato fin'ora:
    codice:
    var avvisa_uscita = false;
    function cancellami()
    {
      //  Qui la procedura di logout!
    }
    window.onbeforeunload = function(e)
    {
      if (!avvisa_uscita)
      {
        e = e || window.event;
        if (e)
        {
          var dialogText = 'Sei sicuro di voler uscire?';
          e.returnValue = dialogText;
          cancellami();  <-- 
        }
          return dialogText;
      }
    };
    // Previene la pressione del tasto F5
    $(document).bind('keypress', function(e)
    {
      if (e.keyCode == 116)
      {
        avvisa_uscita = true;
      }
    });
    Ma alla fine, in qualsiasi modo faccia, che decida di abbandonare la pagina o di restare, la procedura cancellami() viene comunque richiamata.
    In altre parole non sembra sia possibile intercettare la risposta di onbeforeunload, qualcuno mi sa dare qualche input?

    Qui c'è un input: http://stackoverflow.com/questions/3...ogrammatically ma non funziona o a me sembra non funzionare.

    Letture, a parte quelle già inserite in link nell'articolo:
    Microsoft: https://msdn.microsoft.com/en-us/lib...07(VS.85).aspx
    Mozilla: https://developer.mozilla.org/it/doc...onbeforeunload
    jquery: http://api.jquery.com/unload/
    W3School: http://www.w3schools.com/tags/ev_onbeforeunload.asp

  2. #2
    Moderatore di JavaScript L'avatar di br1
    Registrato dal
    Jul 1999
    Messaggi
    19,998
    E' un pochino datato e non ho verificato se i browser aggiornati lo supportano, ma puo' fornirti qualche spunto:

    http://www.html.it/articoli/controll...a-di-pagina-1/
    Il guaio per i poveri computers e' che sono gli uomini a comandarli.

    Attenzione ai titoli delle discussioni: (ri)leggete il regolamento
    Consultate la discussione in rilievo: script / discussioni utili
    Usate la funzione di Ricerca del Forum

  3. #3
    Utente di HTML.it L'avatar di Marcolino's
    Registrato dal
    May 2003
    residenza
    Udine
    Messaggi
    3,606
    Quote Originariamente inviata da br1 Visualizza il messaggio
    E' un pochino datato e non ho verificato se i browser aggiornati lo supportano, ma puo' fornirti qualche spunto:

    http://www.html.it/articoli/controll...a-di-pagina-1/
    Grazie, appena ho tempo gli do un'occhiata, ho visto che usa altri metodi, spero siano utili anche se molto è stato fatto contro questi metodi proprio per eliminare il rischio dei popunder, ma ti faccio sapere.

  4. #4
    Utente di HTML.it L'avatar di Marcolino's
    Registrato dal
    May 2003
    residenza
    Udine
    Messaggi
    3,606
    Bene, ho fatta una prova semplice, semplice.
    Sul body ho inserito il semplice codice: <body onunload="exit();"> e nella stessa pagina ho messo il semplice script:
    codice:
    function exit()
    {
      alert('Boom!');
    }
    ebbene, la funzione non viene richiamata.
    Mentre lo facevo mi sono ricordato che avevo già provato a fare una cosa del genere e non aveva funzionato.
    Ora, tanto per... provo con un file più semplice, ma non credo che cambi nulla.

    PS: ho provato or ora a utilizzare il DOM, tolto l'attributo onunload dal tag body e modificato lo script così:
    codice:
    window.onunload = function()
    {
      document.getElementById('ciao').innerHTML = 'Boom!';
    }
    dopo aver inserito nel body della pagina il seguente <p id="ciao"></p>
    Ed ha funzionato!
    Il motivo è che mi sono ricordato di aver letto in tutti quei link che ho passato, che alert, confirm e prompt nel caso di onunload sono in genere disabilitati per evitare interferenze da ... pubblicitari
    Ultima modifica di Marcolino's; 15-11-2016 a 14:16

  5. #5
    Utente di HTML.it L'avatar di Marcolino's
    Registrato dal
    May 2003
    residenza
    Udine
    Messaggi
    3,606
    Bene, alla fine sembra che ce l'abbia fatta.
    Un po' di ragionamento, un po' di copia e incolla qui e là e funge, quindi ne condivido il codice.
    Semplice javascript da allegare però in ogni pagina che prevede il "distacco" da un sistema a login ( evitate solo la pagina di login dove ovviamente ci si arriva se non siete loggati )
    Codice:
    codice:
                var validNavigation = false;
                // Attach the event keypress to exclude the F5 refresh
                $(document).bind('keypress', function(e)
                {
                    if (e.keyCode == 116)
                    {
                        validNavigation = true;
                    }
                });
    
                // Attach the event click for all links in the page
                $("a").bind("click", function()
                {
                    validNavigation = true;
                });
    
                // Attach the event submit for all forms in the page
                $("form").bind("submit", function()
                {
                    validNavigation = true;
                });
    
                // Attach the event click for all inputs in the page
                $("input[type=submit]").bind("click", function()
                {
                    validNavigation = true;
                });
                function exit()
                {
                    if (validNavigation === false)
                    {
                        $.ajax(
                        {
                            url: 'logout.php',
                            type: 'GET',
                            async:false,
                            disableCaching: true,
                            success: function(data)
                            {
                                return true;
                            },
                            error: function()
                            {
                                alert('C\'è stato un errore cercando di effettuare il logout...');
                            }
                        });
                    }
                };
                window.onunload = function()
                {
                    exit();
                }
    Spiegazione:
    validNavigation = false, serve a dire al sistema che si può uscire, è una variabile globale.
    Viene messa a true da quegli eventi che si vogliono escludere, come ad esempio la pressione del tasto F5 che di fatto non prevede il logout.
    Altra cosa riguarda i link che di fatto sono un cambiamento di pagina, ma se previsti come menù del sito non possono certo prevedere un logout.
    Ma se uno preme su un link esterno? Certo il logout deve essere assicurato, per ora con questo script non è così.
    Oppure la pressione di un tasto di submit, stessa storia, non è un logout; in altre parole in questi casi validNavigation deve essere unguale a true.
    Dato che è complicato intercettare certi tasti, come appunto F5 e dato che per altre ragioni utilizzo la libreria jquery, tanto valeva utilizzarla anche per il monitoraggio dei tasti e dei link nella pagina.
    così come pure nella funzione exit() richiamata dall'evento onunload, l'utilizzo di ajax usa la comoda funzione di jquery.
    Niente vieta di usare puro javascript ovviamente.
    Anzi sarei felice se qualcuno in vena di lavoro volesse cimentarsi e poi postare il codice.
    Comunque sia io ho utilizzato un sistema in ajax che chiama un file remoto che di fatto effettua il logout in modo silenzioso, ma nulla vieta di fare un semplice redirect su una pagina che richiede il logout da parte dell'utente.
    Insomma è una scelta del programmatore.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.