Используя JavaScript для сброса метатега, чтобы препятствовать тому, чтобы он обновил страницу

У нас есть унаследованное приложение (смесь классического ASP и ASP.net), который имеет некоторых содержание Ajax богатые страницы. Ожидание состоит в том, что пользователи сайта выполняют ряд задач на странице, которая может охватить изрядное количество времени, говорят, 15-30 минут.

Одно из требований то, что пользователи, входящие в систему сайта автоматически выйтись из системы после 15 минут неактивности. Это в настоящее время достигается при помощи метатегов для перенаправления пользователя к странице выхода из системы после 15 минут неактивности на странице.

Проблема, которую мы имеем, состоит в том, что браузер не думает, что было любое действие на странице несмотря на наличие многих взаимодействий Ajax с сервером. Таким образом, после 15 минут того, что браузер думает как неактивность, пользователь выходится из системы автоматически, даже если они посреди выполнения чего-то.

Вдохновленный этим форумом отправляют, мы пытались зафиксировать раздражение при помощи JavaScript (JQuery) как так

Ниже был бы обработчик событий, такой как нажатие сохранения на странице и т.д. для простоты, вот загрузка страницы для изменения времени обновления к 5 секундам

$(document).ready(function() {
    var selector = 'meta[name=Refresh]';
    var content = $(selector).attr("content"); //"900;URL=/someurl/logout.asp"
    $(selector).attr("content", "5;URL=/someurl/logout.asp"); 
});

Намерение быть (ре), устанавливающее метатег, удовлетворяет таймер обновления страницы, был бы сброшен. К сожалению, это, кажется, не работает (в IE).

Так как это - унаследованное приложение, некоторые решения т.е. использовать метатеги и т.д. испеклись в. Вопрос, там способ заставить обновление метатега мирно сосуществовать с приложением Ajax? Я делаю что-то не так и являюсь там способом решить эту проблему?

13
задан Jim Aho 11 February 2015 в 10:12
поделиться

2 ответа

при условии, что вы используете jQuery, что-то вроде этого может сработать. Я не тестировал его и не знаю, будут ли браузеры читать метатег a в элементе noscript в заголовке документа.

Замените свой метатег следующим образом:

<script type="text/javascript">
    window.onload = function(){
        var timer = null,
            time=1000*60*15, // 15 minutes
            checker = function(){
                if(timer){clearTimeout(timer);} // cancels the countdown.
                timer=setTimeout(function() { 
                    document.location="/someurl/logout.asp";
                },time); // reinitiates the countdown.
            };
        checker(); // initiates the countdown.
        // requires jQuery... (you could roll your own jQueryless version pretty easily though)
        if(window.jQuery){
            // bind the checker function to user events.
            jQuery(document).bind("mousemove keypress click", checker);
        }
    };
</script>
<noscript>
    <meta name="Refresh" http-equiv="Refresh" content="900;URL=/someurl/logout.asp">
</noscript>

Определенно есть способы сделать это лучше. Как обслуживание двух страниц ... одна для пользователей с javascript и одна без.

Или просто отключите приложение для людей без javascript. : o)

Отредактируйте согласно этой странице: http://www.google.com/support/forum/p/Webmasters/thread?tid=25c023fea4ea60a4&hl=en метаобновление должно работать внутри элемента noscript.

7
ответ дан 2 December 2019 в 01:49
поделиться

Я не думаю, что есть способ остановить метаобновление. Вы можете изменить метатег, но браузер уже решил, что он обновится через 15 минут; нет API, чтобы остановить это.

Если вы не можете остановить обновление или использовать JavaScript для перенаправления, возможно, вы сможете сдержать повреждение:

$(window).unload(function() { 
  // Insert code here 
  // to save the user's work.
  alert('Sorry, you have to log out now.')
}); 
0
ответ дан 2 December 2019 в 01:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: