Остановите UpdatePanel, когда неактивен - PullRequest
2 голосов
/ 20 апреля 2009

Привет, я хотел бы сделать следующее:

Используйте JavaScript, чтобы запретить обновлению панели обновления, когда браузер неактивен, и перезапустите его, как только он снова станет активным. Я смотрел на: Неактивность с JavaScript . Я надеялся, что смогу использовать это для достижения того, чего хочу; кто-то может указать мне правильное направление? Большое спасибо!

[EDIT] Я использую таймер для обновлений, поэтому, если я могу как-то отключить таймер из JavaScript, я думаю, что я могу сделать это.

Ответы [ 5 ]

0 голосов
/ 10 августа 2010

Я нашел потенциальное решение здесь: http://www.thefutureoftheweb.com/blog/detect-browser-window-focus

У меня есть только IE8 для тестирования прямо сейчас, что имеет пару проблем. Во-первых, нажатие вокруг различных элементов на странице вызовет событие focusin, поэтому вам нужен способ проверить, работает ли таймер. это не так уж сложно. ie8 также запускает событие focusout, пока вы щелкаете, поэтому мы должны отложить фактическую остановку таймера, чтобы убедиться, что окно на самом деле не имеет фокуса. к счастью, ie8 всегда запускает focusin сразу после focusout, пока вы нажимаете на страницу, поэтому мы можем отменить отложенное отключение таймера на обработчике focusin.

Я думаю, это должно быть довольно близко к рабочему решению. (адаптировано по ссылке)

// indicates if your refresh timer is running
var updatePanelTimerRunning = true;

// timer id for shutdown procedure
var killTimerID = -1;

function stopTimer(e) {
    // prepare to shutdown
    if (updatePanelTimerRunning && killTimerID == -1) {
        killTimerID = setTimeout(timerShutdown, 1000);
    }
}

function startTimer(e) {

    // cancel pending timer shutdown
    clearTimeout(killTimerID);
    killTimerID = -1;

    if (!updatePanelTimerRunning) {
        // TODO start the update panel refresh timer here
        updatePanelTimerRunning = true;
    }
}

function timerShutdown() {
    // TODO do actual update panel timer stopping here.
    updatePanelTimerRunning = false;
}


if (/*@cc_on ! @*/ false) { // check for Internet Explorer

    document.attachEvent('onfocusin', startTimer);
    document.attachEvent('onfocusout', stopTimer);
}
else {
    // window.onfocus = stopTimer;
    // window.onblur = startTimer;

    window.addEventListener('focus', startTimer, false);
    window.addEventListener('blur', stopTimer, false);
}
0 голосов
/ 08 декабря 2009
window.blur = function() { stopTimer() }
window.focus = function() { startTimer() }

Совместимость браузера может применяться. Надеюсь, это поможет.

0 голосов
/ 21 апреля 2009

Как насчет того, чтобы воспользоваться событием mousemove текущего объекта окна? Если мышь была перемещена, установите таймер на 1 минуту или около того и деактивируйте событие. Повторите этот цикл, используя setInterval ().

Это также помогло бы, если бы пользователь некоторое время дремал.

0 голосов
/ 08 декабря 2009

добавить этот скрипт в событие head,

<script type ="text/javascript">
    var timerEnabled = true;

    function ToggleTimer(btn, timerID)
    {
        // Toggle the timer enabled state
        timerEnabled = !timerEnabled;

        // Get a reference to the Timer
        var timer = $find(timerID);
        if (timerEnabled)
        { 
            btn.value = 'Pause';
            // Start timer
            timer._startTimer();
        }
        else
        {
            btn.value = 'Resume'; 
            // Stop timer
            timer._stopTimer();
        }            
    }
</script>

добавить элемент управления ярлыком asp.net на панели обновлений для тестирования

<asp:Label Id="Label1" Text="" runat="server" />

добавить кнопку HTML вне панели обновления

<input type="button" id="btntimercontroller" value="Pause" onclick="return ToggleTimer(btntimercontroller, '<%= ajaxtimer.ClientID%>');" />

чтобы проверить, останавливается ли таймер, добавьте этот код в файл aspx.cs

protected void Page_Load(object sender, EventArgs e)
{       
    Label1.Text = DateTime.Now.ToLongTimeString();    
}

Просто опустите знак (") в скрипте, потому что это приведет к ошибке ...

0 голосов
/ 20 апреля 2009

Я рекомендую прочитать эту книгу: http://oreilly.com/catalog/9780596527471/. В ней рассказывается все, что вам нужно знать о элементе управления ASP.NET AJAX UpdatePanel. Для документации API, пожалуйста, посетите: http://msdn.microsoft.com/nb-no/library/bb311028(en-us).aspx.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...