Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    Per chi fosse interessato: Script per aggiornare chat

    Questo script, partorito dopo 2 giorni di prove, permette di controllare se un file è stato modificato negli ultimi 3 secondi (nell'esempio il file è tc.txt), e se ciò è vero allora aggiorna la pagina della chat...che ne pensate?? consigli, opinioni...

    codice:
    <body onload="ciclocookie()">
    <script>
    
    function getLastModified(file) {
    
        if (typeof XMLHttpRequest != "undefined") {
            xhr = new XMLHttpRequest();
        }
        else {
            try {
                xhr = new ActiveXObject("Msxml2.XMLHTTP");
            } catch (e) {
                try {
                    xhr = new ActiveXObject("Microsoft.XMLHTTP");
                }
                catch (e) {
                    xhr = null;
                }
            }
        }
    
        if (xhr != null) {
    
            xhr.open("HEAD", file, false);
            xhr.send(null);
    
            if ((xhr.status == 200) || ((xhr.status == 304))) {
                return xhr.getResponseHeader("Last-Modified");
            }
        }
    
        return -1;
    }
    
    function getCookieVal (offset)
    
       {
    
       var endstr = document.cookie.indexOf (";", offset);
    
       if (endstr == -1)
    
          endstr = document.cookie.length;
    
       return unescape(document.cookie.substring(offset, endstr));
    
       }
    
    function GetCookie (name)
    
       {
    
       var arg = name + "=";
      var alen = arg.length;
      var clen = document.cookie.length;
      var i = 0;
      while (i < clen)
          {
          var j = i + alen;
          if (document.cookie.substring(i, j) == arg)
             return getCookieVal (j);
          i = document.cookie.indexOf(" ", i) + 1;
          if (i == 0)
    
             break;
    
          }
    
       return null;
    
       }
    
    function SetCookie (name, value)
    
       {
    
       var argv = SetCookie.arguments;
       var argc = SetCookie.arguments.length;
       var expires = (2 < argc) ? argv[2] : null;
       var path = (3 < argc) ? argv[3] : null;
       var domain = (4 < argc) ? argv[4] : null;
       var secure = (5 < argc) ? argv[5] : false;
       document.cookie = name + "=" + escape (value) +
         ((expires == null) ? "" : ("; expires=" + expires.toGMTString())) +
         ((path == null) ? "" : ("; path=" + path)) +
         ((domain == null) ? "" : ("; domain=" + domain)) +
            ((secure == true) ? "; secure" : "");
       }
    
    var datelm = (new Date(getLastModified("tc.txt"))).getTime();
     var expdate = new Date();
    
    expdate.setTime(expdate.getTime() + (24 * 60 * 60 * 1000 * 365));
     SetCookie("datecookie", datelm, expdate, "/", null, false);
    
     function ciclocookie()
       {
    var datenow = (new Date(getLastModified("tc.txt"))).getTime();
    if (datenow != GetCookie("datecookie"))
    {
    parent.frames["chat"].location.href = "chat.php";
    var expdate = new Date();
    expdate.setTime(expdate.getTime() + (24 * 60 * 60 * 1000 * 365));
    SetCookie("datecookie", datenow, expdate, "/", null, false);
    }
    setTimeout('ciclocookie()', 3000);
    
     }
    
    
    
    </script>
    </body>
    The gate to tomorrow is not the light of heaven but the darkness in the depth of the earth

  2. #2
    Frontend samurai L'avatar di fcaldera
    Registrato dal
    Feb 2003
    Messaggi
    12,924
    forse era meglio fare un refresh di pagina o di un iframe con l'apposito tag meta refresh ogni tot secondi... anche se meno elegante come soluzione ma più semplice.

    E' vero che con il tuo metodo fai refresh solo quando il file è stato modificato, però devi fare ben due chiamate sincrone in più (una per leggere la data di modifica e un altro per leggere l'ora del server il tutto moltiplicato per il numero di client connessi) e il sistema funziona solo se javascript è attivo

    in altre parole se hai ad esempio 50 utenti connessi fai solo per il controllo 100 chiamate al sever ogni 3 secondi... il ricaricamento della pagina poi "costa" uguale per entrambi i modi.

    Cmq se stiamo parlando di una intranet e tutti i pc connessi alla chat hanno js attivo e accettano tutti i cookie è una soluzione.

    IMHO ovviamente

    Vuoi aiutare la riforestazione responsabile?

    Iscriviti a Ecologi e inizia a rimuovere la tua impronta ecologica (30 alberi extra usando il referral)

  3. #3
    Beh, non è un'intranet, ma comunque si prevedono pochi utenti connessi (diciamo che è una cosa per me e pochi amici ). Cmq prima avevo uno script php che veniva aggiornato ogni 3 secondi e che faceva lo stesso check, ma in php...mi pare che questo per il server fosse ancora più pesante...
    Inoltre c'è da considerare che la doppia chiamata non la fa sempre, ma solo quando il file viene modificato.

    Infine c'è da dire che il refresh ogni tot secondi della pagina di una chat è molto...molto fastidioso...(ad esempio sarebbe impossibile selezionare del testo per copiarlo, per non parlare poi del fastidioso "click" di quando si aggiorna una pagina e del fatto che la barra di caricamento di IE va avanti e indietro ogni 3 secondi )
    The gate to tomorrow is not the light of heaven but the darkness in the depth of the earth

  4. #4
    Frontend samurai L'avatar di fcaldera
    Registrato dal
    Feb 2003
    Messaggi
    12,924
    le chiamate le fai ogni tre secondi.

    Infatti tu chiami la funzione ciclocookie() ogni tre secondi e dentro richiami la funzione getLastModified()

    non vedo quella che legge l'ora dal server ma ovviamente sarà sempre lì dentro.
    Vuoi aiutare la riforestazione responsabile?

    Iscriviti a Ecologi e inizia a rimuovere la tua impronta ecologica (30 alberi extra usando il referral)

  5. #5
    ah infatti non c'è più...alla fine ho fatto un'altra cosa...ora lo script funziona così: fa una chiamata per leggere la data del file, e la salva su un cookie...poi ogni 3 secondi controlla se la data salvata nel cookie è diversa da quella attuale, se lo è, aggiorna la pagina

    Le chiamate quindi sono leggermente ridotte (sono 2 solo quando uno entra in chat la prima volta, poi rimate solo quella di ciclocookie() ogni 3 secondi)
    The gate to tomorrow is not the light of heaven but the darkness in the depth of the earth

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.