Получить время, потраченное пользователем на загрузку в Asp.Net и JavaScript - PullRequest
0 голосов
/ 10 августа 2010

Мне нужно получить время, которое каждый пользователь провел на странице, и вставить эту информацию в базу данных.

Когда страница загружается, я назначаю время начала значению javascript. по функции onunload тела я вычисляю разницу во времени между временем начала и окончания, чтобы я мог вставить его в базу данных.

Я использую диспетчер сценариев, и EnablePageMethods имеет значение true. А в функции javascript, которую я вызываю onunload, я вызываю веб-метод с использованием методов страницы.

Кажется, в 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
            { }
        }

Ответы [ 2 ]

2 голосов
/ 11 октября 2011

Если бы мне это понадобилось, я бы применил js clock, который сообщал бы серверу, что пользователь подключен к сети.Первая и последняя запись с одинаковым идентификатором сеанса будет указывать время, которое пользователь проводит на вашем сайте.

Js что-то вроде:

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

c #

public void ProcessRequest(HttpContext context) {
   context.Session["KeepSessionAlive"] = DateTime.Now;
   //etc
}
1 голос
/ 27 апреля 2013

Одним из лучших решений, которое я смог найти для этой проблемы, является использование jQuery для клиентской стороны и веб-сервисов asp.net для серверной части.jQuery работает как шарм, так как в большинстве случаев он работает в разных браузерах.

...