2010-08-10 53 views
0

我需要讓每個用戶花費在頁面上的時間並將該信息插入到數據庫中。在Asp.Net和javascript中獲取用戶在onunload上的時間

當頁面加載時,我將一個開始時間分配給一個javascript值。對身體的onunload函數,我計算開始時間和結束時間之間的時間差,以便我可以將其插入數據庫。

我使用腳本管理器並將EnablePageMethods設置爲true。而在我呼籲onunload的JavaScript函數中,我使用pagemethods調用了一個web方法。

它似乎在Firefox中正常工作。但是在Chrome和IE中它不起作用。

你們有沒有任何想法,因爲我真的失去它。提前致謝。

腳本管理器的代碼是:

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

JS代碼是類似的東西:

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#代碼是類似的東西:

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

你能展示如何調用ExitPage嗎? – Kenoyer130 2010-08-10 13:54:02

+0

確定: – 2010-08-10 13:57:41

+0

你可能已經知道這一點,但我會說 - 無論如何 - 數據將是非常不準確的。你沒有得到關於瀏覽器崩潰的人的數據;你只需在後臺打開一個標籤就可以獲得很長的時間;而且每次重新加載此選項卡時,頻繁重新啓動瀏覽器的用戶都會得到錯誤的訪問者數量。 – Timwi 2010-08-10 14:11:37

回答

1

一個我能找到解決這個問題的最佳解決辦法是使用jQuery的客戶端,爲的asp.net web服務後端。 jQuery的功能就像一個魅力,因爲在大多數情況下,它在不同的瀏覽器中工作

+0

你能說我關於那個計算用戶在網站花費時間的解決方案嗎? – 2013-06-09 14:02:17

+1

你可以通過jquery load()獲取加載時間,並通過jquery unload()方法計算卸載的差異。之後,您可以進行簡單的Ajax調用並更新頁面上的時間。 – 2013-06-13 15:47:45

+0

是的,我做了你喜歡你說的近似。 – 2013-06-14 04:39:46

2

如果我需要這我會實現js時鐘,它會向服務器報告該用戶在線。具有相同會話ID的第一個和最後一個記錄會指示用戶在您的網站上花費的時間。

的js是這樣的:

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

C#

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

不是我正在尋找那個時間的確切解決方案,而是想法+1。謝謝。 – 2013-04-27 16:15:34

+0

我認爲,每10分鐘我會發送請求並增加現場會議記錄。大概,我會計算生活期 – 2013-06-14 04:37:03

相關問題