编程语言
首页 > 编程语言> > 如果在设定的时间范围内未检测到任何活动,Javascript bookmarklet / iFrame会自动刷新加载的页面吗?

如果在设定的时间范围内未检测到任何活动,Javascript bookmarklet / iFrame会自动刷新加载的页面吗?

作者:互联网

我有一个基于浏览器的应用程序,我在工作中使用(因为有效的所有企业应用程序现在基于浏览器,显而易见的原因),会话超时非常短暂.我不确定会话超时的确切设置,但它大约是5-10分钟.

不可避免地,每当我必须使用它时,会话已经超时,我将信息输入应用程序,提交它,然后页面加载一个全新的会话而没有任何实际传递的信息 – 我得到的只是一个新的会话.然后,我必须重新输入信息并再次提交,以便实际提取我想要的信息.当然,我可以先刷新页面,然后输入信息,但我永远不知道会话是否超时,偶尔会慢慢运行,所以这是浪费时间.我们的开发团队无法预见到这样的小事情不仅令人讨厌,而且当你考虑到失去的时间(我为一家非常大的公司工作)等待爆破的事情时,最终还要花费我们一大笔钱.重新加载,然后必须重新输入提交的信息,如果预先刷新被遗忘,因为它通常恰好超出我.在某些时候,我希望成为程序员和我们的客户服务机构之间的联络人.

无论如何,我离题了.

我想要做的是:我想创建一个Javascript书签或其他东西,如果在特定时间范围内未检测到活动,它会自动刷新它正在打开的任何页面.这个时间范围有点短,无论我最终弄清楚会话超时是什么.基本上我只想让页面每隔一段时间重新加载一次,比如五分钟,如果在那段时间内没有活动的话. (我不希望它突然刷新,因为当我正在使用应用程序时,时间已经到了,它应该进行自动刷新的唯一时间是应用程序页面是否处于空闲状态)

可以使用Javascript书签来完成吗?我应该编写一个页面“包装”的各种加载应用程序页面在iFrame或类似的东西?我使用的应用程序站点有很多子页面,如果发生自动刷新超时,我更愿意刷新我当时碰巧遇到的任何页面.当然,如果这是不可能的,我会接受它只是重新加载主网站页面,如果这是不容易的,因为如果我已经超出应用程序足够长的时间发生超时,那么我可能不需要仍然在我当时的任何帐户/页面上.

希望我已经很好地解释了自己.逻辑很简单 – 如果没有检测到x个时间的活动,刷新当前页面就是它的要点.

谢谢你,我的StackOverflow兄弟们,再次感谢你的帮助.

-Sootah

由于我无法影响页面本身的编码,因此我必须拥有最简单的解决方案.如果超时达到最后一次刷新/页面加载然后刷新同一页面的书签将是完美的.

如果那是不可能的话,那么如果我能写一个简单的页面,我可以从本地计算机运行,通过在一个框架中加载页面或者也可以接受的东西来执行相同的功能.

EDIT 10/3/11 7:25am MST

因为我工作坟墓和一个奇怪的工作时间表(不幸的是,这个网站被封锁,因为它被认为是一个’论坛’ – 我从事金融工作,他们对信息泄漏过于谨慎)在我给予奖励之前,这些事件检测器检测到最后一次加载页面/?像document.onload或诸如此类的东西.我认为从上次加载页面开始设置计时器将是最简单和最有效的方法.在处理其他事情时,我的鼠标可能会在浏览器上移动我无意中打开了网站,如果计时器重置因为没有我实际上与网站进行了交互,以便页面加载/重新加载然后会话超时

解决方法:

这是你的书签代码#1,设置为五秒.将时间更改为您喜欢的内容.

javascript:
(function () { 
    var q = null;
    function refresh() { window.location.reload(); }
    function x() { clearTimeout(q); a(); }
    function a() { q = setTimeout( refresh, 5000 ); }

    document.body.onclick = x;
    document.body.onmousemove = x;
    document.body.onmousedown = x;
    document.body.onkeydown = x;
}())

p.s.:包括eventListeners会更好,但我想你也需要支持IE8,所以我用内联事件替换它们 – 如果你不需要IE8,使用代码#2:

javascript:
(function () { 
    var q = null;
    function refresh() { window.location.reload(); }
    function x() { clearTimeout(q); a(); }
    function a() { q = setTimeout( refresh, 5000 ); }

    document.body.addEventListener( "click", x, false );
    document.body.addEventListener( "mousemove", x, false );
    document.body.addEventListener( "mousedown", x, false );
    document.body.addEventListener( "keydown", x, false );
}())

编辑:响应评论,这里是代码#3拉,而不是刷新页面.然而,尽管建议使用iframe,我认为可能不希望在该页面上执行脚本,因此我们将使用img代替:

javascript:
(function () { 
    var q = null;
    var u = window.location.href;
    var i = document.createElement('img');
    i.style = "width: 1px; height: 1px;";
    document.body.appendChild(i);
    function refresh() {
        i.src = "";
        i.src = u;
        x(); 
    }
    function x() { clearTimeout(q); a(); }
    function a() { q = setTimeout( refresh, 5000 ); }

    var evs = ['click', 'mousemove', 'mousedown', 'keydown']; 
    for( var j = 0; j < evs.length; j++) {
        document.body['on'+evs[j]] = x;
    }
}())

标签:javascript,iframe,session-state,session-timeout,bookmarklet
来源: https://codeday.me/bug/20190530/1186033.html