Использование javascript для reset метатега, чтобы он не обновлял страницу
У нас есть устаревшее приложение (смесь классических ASP и ASP.net), в котором есть несколько страниц с богатым содержанием Ajax. Ожидается, что пользователи сайта выполняют набор задач на странице, которые могут охватывать справедливую сумму времени говорят, 15-30 минут.
Одним из требований является то, что пользователи, регистрирующиеся на сайте, автоматически выходят из системы через 15 минут бездействия. В настоящее время это достигается за счет использования метатег для перенаправления пользователя на страницу выхода после 15 минут бездействия на странице.
<meta name='Refresh' http-equiv="Refresh" content="900;URL=/someurl/logout.asp">
Проблема, с которой мы сталкиваемся, заключается в том, что браузер не считает, что на странице было какое-либо действие, несмотря на наличие большого количества взаимодействий 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");
});
При намерении (re) установки содержимого метатега таймер обновления страницы будет reset. К сожалению, это не работает (в IE).
Поскольку это устаревшее приложение, некоторые из решений, например, использовать метатеги и т.д., испечены. Вопрос в том, есть ли способ обновить метатег, чтобы мирно сосуществовать с приложением Ajax? Я что-то делаю неправильно, и есть ли способ решить эту проблему?
Ответы
Ответ 1
Предполагая, что вы используете jQuery, что-то вроде этого может работать. Я не тестировал его и не знаю, будут ли браузеры читать метатег внутри элемента 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>
Есть определенные способы сделать это. Подобно обслуживанию 2 страницы... один для пользователей с javascript и один без.
Или просто отключите приложение для людей без javascript.: О)
Edit
в соответствии с этой страницей: http://www.google.com/support/forum/p/Webmasters/thread?tid=25c023fea4ea60a4&hl=en мета-обновление должно работать внутри элемента noscript.
Ответ 2
Я не думаю, что есть способ остановить обновление мета. Вы можете изменить метатег, но браузер уже решил, что он обновится через 15 минут; там нет API, чтобы остановить это.
Если вы не можете остановить обновление или использовать JavaScript для перенаправления, возможно, вы можете содержать ущерб:
$(window).unload(function() {
// Insert code here
// to save the user work.
alert('Sorry, you have to log out now.')
});