2010-08-10 10 views
0

Je dois obtenir le temps que chaque utilisateur a passé sur la page et insérer cette information dans la base de données. Lorsque la page est chargée, j'attribue une heure de début à une valeur JavaScript. Sur la fonction onunload du corps, je calcule la différence de temps entre l'heure de début et l'heure de fin pour que je puisse l'insérer dans la base de données. J'utilise le gestionnaire de script et EnablePageMethods est défini sur true. Et dans la fonction javascript que j'appelle onunload, j'appelle une méthode web en utilisant pagemethods.Obtenir le temps passé par l'utilisateur onunload dans Asp.Net et javascript

Cela semble fonctionner correctement dans Firefox. Cependant, dans Chrome et IE, cela ne fonctionne pas.

Est-ce que quelqu'un d'entre vous a une idée, parce que je la perds vraiment. Merci d'avance.

Le code Script Manager est:

<asp:ScriptManager ID="ScriptManager1" runat="server" EnablePageMethods="true"> 
         </asp:ScriptManager> 

Le code js est quelque chose comme ça:

function ExitPage() { 
     try { 
     var leavingTime = new Date(); 
     alert("entering: " + enteringTime); 
     alert("exiting: " + leavingTime); 
     var diff = leavingTime - enteringTime; 
     alert("diff: " + diff); 
     alert(window.location); 

     } 
     catch (Err) { 
      alert("Before error:" + Err.Description); 
     } 

     try { 

      alert("Before PageMethods Call"); 

      PageMethods.set_path('SomePage.aspx'); 
      PageMethods.ClosePage(diff,onSuccess,onFail); 
     } 
     catch (Err) { 
      alert("Error In PageMethods Block:" + Err.Description); 
     } 

     alert("Before Return"); 
     return false; 

    } 

    function onSuccess() { 
     alert("Success"); 
    } 

    function onFail() { 
     alert("Fail"); 
    } 

C# Code est quelque chose comme ça:

[System.Web.Services.WebMethod] 
     public static void ClosePage(int milliseconds) 
     { 
      try{ 
       // Insert millisecond to database... 
      } 
      catch 
      { } 
     } 
+0

Pouvez-vous montrer comment ExitPage est appelé? – Kenoyer130

+0

sure: –

+0

Vous le savez probablement déjà, mais je vais le dire quand même - les données seront très inexactes. Vous n'obtenez aucune donnée sur les personnes dont le navigateur se bloque; vous obtenez de longs moments de la part de personnes qui laissent simplement un onglet ouvert en arrière-plan; et vous obtenez des comptes de visiteurs erronés de personnes qui redémarrent fréquemment leur navigateur avec cet onglet de rechargement à chaque fois. – Timwi

Répondre

1

L'une des meilleure solution que je pouvais trouver à ce problème est d'utiliser jQuery pour le côté client et les services Web asp.net pour la backend. jQuery fonctionne comme un charme car dans la plupart des cas, il fonctionne dans différents navigateurs.

+0

pouvez-vous me dire à propos de cette solution qui permet de calculer le temps passé par l'utilisateur sur le site? –

+1

Vous pouvez obtenir le temps de chargement par jquery load() et calculer la différence lors du déchargement par les méthodes jquery unload(). Après cela, vous pouvez faire un simple appel ajax et mettre à jour le temps passé sur la page. –

+0

oui je l'ai fait comme vous dites environ. –

2

Si je aurais besoin Je voudrais implémenter js clock qui signalerait au serveur que l'utilisateur est en ligne. Le premier et le dernier enregistrement avec le même identifiant de session indiqueraient le temps passé par l'utilisateur sur votre site.

Js quelque chose comme:

$.post("/KeepSessionAlive.ashx", null, function() { 
    LastConnectionTime=new Date(); 
} 

C#

public void ProcessRequest(HttpContext context) { 
    context.Session["KeepSessionAlive"] = DateTime.Now; 
    //etc 
} 
+0

Pas la solution exacte que je cherchais à cette époque, mais +1 pour l'idée. Merci. –

+0

Je pense que, pour chaque 10 minutes, je vais envoyer une demande et augmenter les minutes en direct. Environ, je vais calculer la période en direct –