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

Javascript bookmarklet/iFrame在设置的时间范围内未检测到任何活动时自动刷新加载的页面?,javascript,iframe,session-state,bookmarklet,session-timeout,Javascript,Iframe,Session State,Bookmarklet,Session Timeout,我有一个基于浏览器的应用程序,我在工作中使用它(因为显而易见的原因,现在所有的公司应用程序都是基于浏览器的),它的会话超时非常短。我不确定会话超时的确切设置,但大约是5-10分钟 不可避免的是,每当我不得不使用它时,会话超时,我将信息输入应用程序,提交,然后页面加载一个全新的会话,而没有任何信息被实际传递——我得到的只是一个新会话。然后,我必须重新输入信息,并再次提交,以便让它实际提取我想要的内容。当然,我可以先刷新页面,然后输入信息,但我永远不知道会话是否超时,有时它运行得非常慢,所以这是浪费

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

不可避免的是,每当我不得不使用它时,会话超时,我将信息输入应用程序,提交,然后页面加载一个全新的会话,而没有任何信息被实际传递——我得到的只是一个新会话。然后,我必须重新输入信息,并再次提交,以便让它实际提取我想要的内容。当然,我可以先刷新页面,然后输入信息,但我永远不知道会话是否超时,有时它运行得非常慢,所以这是浪费时间。我们的开发团队无法预见这样的小事情不仅令人恼火,而且当你考虑到损失的时间(我在一个非常大的公司工作)时,也会花费我们大量的钱。只是等待爆炸的东西重新加载,然后必须重新输入提交的信息,如果预刷新被遗忘,因为它通常是我无法理解的。在某种程度上,我希望成为程序员和我们的客户服务机构之间的联络人

无论如何,我离题了

我想做的是:我想创建一个Javascript bookmarklet或其他东西,如果在某个时间段内没有检测到活动,它将自动刷新任何页面。这个时间段将比我最终确定会话超时的时间短一点。基本上,我只想让页面每隔,比如说,五分钟重新加载一次,如果在这段时间内没有活动的话。(我不想让它刷新,因为我在使用应用程序的时间到了,它唯一应该做的自动刷新是如果应用程序页面闲置)

这可以通过Javascript bookmarklet实现吗?我是否应该编写一个页面“包装器”,将应用程序页面加载到iFrame或类似的东西中?我使用的应用程序站点有很多子页面,如果出现自动刷新超时,我更希望它刷新我当时正在使用的任何页面。当然,如果这是不可能的,我会接受它只是重新加载主网站页面如果这不容易,因为如果我已经离开应用程序足够长的时间,超时发生,那么我可能不需要仍然在任何帐户/页面上,我当时在

希望我已经解释清楚了。逻辑很简单-
如果在x时间内没有检测到任何活动,则刷新当前页面
是其要点

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

-苏塔赫


因为我没有能力影响页面本身的编码,所以我必须有最简单的解决方案。对上次刷新/页面加载进行计时,然后在达到超时时刷新同一页面的bookmarklet将是完美的

如果这是不可能的,那么如果我可以写一个简单的页面,我可以从本地计算机上运行,通过将页面加载到一个框架或其他可以接受的东西来完成相同的功能


因为我在graves工作,而且工作日程安排很奇怪(不幸的是,这个网站被封锁了,因为它被认为是一个‘论坛’——我在金融界工作,他们对信息泄露过于谨慎)在我授予赏金之前,这些事件检测器中是否有一个检测页面上次加载的时间/?类似于document.onload或诸如此类的内容。我认为从上次加载页面开始设置计时器将是最简单、最有效的方法。我的鼠标可能会在浏览器上移动,我在处理其他事情时无意中打开了网站,如果计时器因此而重置,而我实际上没有以页面加载/重新加载的方式与网站进行交互,则会话超时。

伪代码

timeout = settimeout("call",200);
document.onmousemove = function() { timeout = new timeout("call",200); }
function call() {
    document.refresh();
}

像这样?

创建一个书签,并将下面的代码放在“url”值中。请注意,您应该更改“sessiontimeout”和“checkinterval”的值。它们都以毫秒为单位

javascript:(function(){var lastmove = new Date().valueOf(),sessiontimeout=10000,checkinterval=1000;document.onmousemove = function(e){lastmove= new Date().valueOf();};timer = setInterval( function() {var differential = (new Date().valueOf() - lastmove);if (differential > sessiontimeout) {var iframe = document.getElementById("bkmrkiframerefresher");if (iframe) { document.getElementsByTagName("body")[0].removeChild(iframe);} iframe = document.createElement("iframe");iframe.setAttribute("src", "/");iframe.setAttribute("width", 0);iframe.setAttribute("height", 0);iframe.setAttribute("style", "width:0;height:0;display:none;");iframe.setAttribute("id", "bkmrkiframerefresher");document.getElementsByTagName("body")[0].appendChild(iframe);lastmove = new Date().valueOf();} }, checkinterval);})();
这是一个bookmarklet,它将在页面中插入下面的代码。我在Chrome中测试了bookmarklet。除了stackoverflow之外,它可以在多个站点上工作,似乎出于安全原因,它们会阻止帧离开办公桌前,打开您希望保持活动状态的网站,然后单击网站上的书签。回来后,刷新页面以清除正在运行的计时器

格式化(和注释)代码为:


//上次鼠标移动时
var lastmove=new Date().valueOf();
var sessiontimeout=10000;
var检查间隔=1000;
//重置上次移动鼠标的时间
document.onmousemove=函数(e){
lastmove=新日期().valueOf();
}
//定期检查超时情况
计时器=设置间隔(函数(){
变量差=(新日期().valueOf()-lastmove);
如果(差异>会话超时){
var iframe=document.getElementById(“BKMRKIFrameRefresh”);
//如果框架已存在,请在将其加载回之前将其删除
if(iframe){
document.getElementsByTagName(“body”)[0].removeChild(iframe);
}
//警报(“超过10秒”+差分);
//创建一个iframe并将其src设置为网站的根目录
iframe=document.createElement(“iframe”);
javascript:(function(){var lastmove = new Date().valueOf(),sessiontimeout=10000,checkinterval=1000;document.onmousemove = function(e){lastmove= new Date().valueOf();};timer = setInterval( function() {var differential = (new Date().valueOf() - lastmove);if (differential > sessiontimeout) {var iframe = document.getElementById("bkmrkiframerefresher");if (iframe) { document.getElementsByTagName("body")[0].removeChild(iframe);} iframe = document.createElement("iframe");iframe.setAttribute("src", "/");iframe.setAttribute("width", 0);iframe.setAttribute("height", 0);iframe.setAttribute("style", "width:0;height:0;display:none;");iframe.setAttribute("id", "bkmrkiframerefresher");document.getElementsByTagName("body")[0].appendChild(iframe);lastmove = new Date().valueOf();} }, checkinterval);})();
<script type="text/javascript">
            // last time the mouse moved
            var lastmove = new Date().valueOf();
            var sessiontimeout=10000;
            var checkinterval=1000;

            // reset the last time the mouse moved
            document.onmousemove = function(e){
                lastmove= new Date().valueOf();
            }

            // check periodically for timeout
            timer = setInterval( function() {

                var differential = (new Date().valueOf() - lastmove);

                if (differential > sessiontimeout) {
                    var iframe = document.getElementById("bkmrkiframerefresher");
                    // iframe already exists, remove it before loading it back
                    if (iframe) {
                        document.getElementsByTagName("body")[0].removeChild(iframe);
                    }

                    // alert("more than 10 secs elapsed " + differential);
                    // create an iframe and set its src to the website's root
                    iframe = document.createElement("iframe");
                    iframe.setAttribute("src", "/");
                    iframe.setAttribute("width", 0);
                    iframe.setAttribute("height", 0);
                    iframe.setAttribute("id", "bkmrkiframerefresher");
                    iframe.setAttribute("style", "width:0;height:0;display:none;");
                    document.getElementsByTagName("body")[0].appendChild(iframe);

                    // reset counter.
                    lastmove = new Date().valueOf();
                }
            }, checkinterval);

        </script>
<script type="text/javascript">
            var pollInterval=1000;

            timer = setInterval( function() {
                    var iframe = document.getElementById("bkmrkiframerefresher");
                    // iframe already exists, remove it before loading it back
                    if (iframe) {
                        document.getElementsByTagName("body")[0].removeChild(iframe);
                    }

                    // create an iframe and set its src to the website's root
                    iframe = document.createElement("iframe");
                    iframe.setAttribute("src", "/");
                    iframe.setAttribute("width", 0);
                    iframe.setAttribute("height", 0);
                    iframe.setAttribute("id", "bkmrkiframerefresher");
                    iframe.setAttribute("style", "width:0;height:0;display:none;");
                    document.getElementsByTagName("body")[0].appendChild(iframe);
                }
            }, pollInterval);

        </script>
javascript:var time = 500; var timeoutFunc = function(){location.reload(true);};timeout = setTimeout(timeoutFunc,time);document.onmousemove = function() {clearTimeout(timeout);timeout = setTimeout(timeoutFunc,time); };
//The time in milliseconds before reload
var time = 500;
//The function that is called when the timer has reached 0
var timeoutFunc = function()  { 
    location.reload(true);
};
//start the timer
timeout = setTimeout(timeoutFunc,time);
//restart the timer if the mouse is moved
document.onmousemove = function() {
    clearTimeout(timeout);
    timeout = setTimeout(timeoutFunc,time); 
};
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;
}())
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 );
}())
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;
    }
}())