使用JavaScript来重置元标记,以防止它刷新页面
-
18-09-2019 - |
题
我们有有一些Ajax内容丰富pages.The意料的是,该网站的用户执行一组网页上的任务,可以跨越相当数量的遗留应用程序(传统的ASP和ASP.net的混合物)的时间说,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");
});
的目的是(重新)设置元标记的内容的页面刷新计时器将复位。不幸的是这似乎没有工作(在IE)。
由于这是一个旧的应用程序,一些决定,即对使用元标签等进行烘烤,但问题是,有没有办法让meta标记刷新和平共存与Ajax应用程序?我是不是做错了什么,是有解决这个问题的方法吗?
解决方案
假设你正在使用jQuery这样的事情可能会奏效。我没有测试过,不知道浏览器将在文件头,无脚本元素中读取的元标记。
这个替换您的meta标签:
<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。 :O)
修改强> 根据这个页面: http://www.google .COM /支持/论坛/ p /管理者/线程?TID = 25c023fea4ea60a4&HL = EN 元刷新应该无脚本元素在里面工作。
其他提示
我不认为有一个办法可以阻止元刷新。您可以更改meta标签,但浏览器已经决定了它会在15分钟内刷新;有没有API来制止。
如果您不能停止刷新或使用JavaScript做重定向,也许可以遏制损害:
$(window).unload(function() {
// Insert code here
// to save the user's work.
alert('Sorry, you have to log out now.')
});