使用javascript重置元标记以防止它刷新页面

Dil*_*nan 13 javascript jquery internet-explorer refresh meta-tags

我们有一个遗留应用程序(经典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"); 
});
Run Code Online (Sandbox Code Playgroud)

将重置(重新)设置元标记内容的页面刷新计时器的意图将被重置.不幸的是,这似乎不起作用(在IE中).

由于这是一个遗留应用程序,因此有些决定即使用元标记等.问题是,有没有办法让元标记刷新与Ajax应用程序和平共存?我做错了什么,有办法解决这个问题吗?

Dav*_*och 7

假设您正在使用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>
Run Code Online (Sandbox Code Playgroud)

肯定有更好的方法可以做到这一点.就像服务2页一样...一个用户使用javascript而另一个没有.

或者只是禁用没有javascript的人的应用程序.:O)

根据此页面进行编辑:http://www.google.com/support/forum/p/Webmasters/thread?tid = 25c023fea4ea60a4 &hl = zh_cn元刷新应该在noscript元素内部工作.