Visualizzazione dei risultati da 1 a 5 su 5

Discussione: onbeforeunload

Hybrid View

  1. #1
    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

  2. #2
    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.

  3. #3
    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

  4. #4
    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 © 2026 vBulletin Solutions, Inc. All rights reserved.