Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/394.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 当用户离开页面时,如何定期刷新页面?如果在页面上,则不刷新_Javascript_Jquery - Fatal编程技术网

Javascript 当用户离开页面时,如何定期刷新页面?如果在页面上,则不刷新

Javascript 当用户离开页面时,如何定期刷新页面?如果在页面上,则不刷新,javascript,jquery,Javascript,Jquery,当用户不在页面上时,是否可以每分钟刷新一个网页?例如,如果我正在访问一个PageX并停留在该页面上,它不会刷新,但一旦我离开该页面(即,切换到另一个选项卡/窗口或程序,则PageX会每x分钟或秒刷新一次?如何执行此操作?Thx 更新: “在页面上”意味着页面是当前窗口,即它有焦点。因此,如果PageX有一个指向弹出窗口的链接,比如说100 x 100,点击打开弹出窗口,而页面在微小的弹出窗口后面仍然可见,它没有焦点,因此需要如上所述进行刷新 有什么不清楚的请问 更新2 正如下面Mattk所建议的

当用户不在页面上时,是否可以每分钟刷新一个网页?例如,如果我正在访问一个PageX并停留在该页面上,它不会刷新,但一旦我离开该页面(即,切换到另一个选项卡/窗口或程序,则PageX会每x分钟或秒刷新一次?如何执行此操作?Thx

更新:

“在页面上”意味着页面是当前窗口,即它有焦点。因此,如果PageX有一个指向弹出窗口的链接,比如说100 x 100,点击打开弹出窗口,而页面在微小的弹出窗口后面仍然可见,它没有焦点,因此需要如上所述进行刷新

有什么不清楚的请问

更新2

正如下面Mattk所建议的那样..以下内容似乎在Firefox(最新版本)和Chrome中工作。在IE 8中,如果我切换到另一个选项卡或程序,它不会刷新页面,但如果我在页面上并单击地址栏,它会开始刷新页面。你知道如何让它在IE中工作吗

var pageFocused = false;

function onPageFocus(){
   pageFocused = true;
   //document.body.className = 'focused';
}

function onPageBlur() {
    pageFocused = false;
    //document.body.className = 'blurred';
};

function checkActivity() {        
    if(pageFocused == false){
        location.reload(true);
    }
}
setInterval("checkActivity()", 1 * 1000);
if (!+"\v1") { // check for Internet Explorer            
    document.onfocusin = onPageFocus;
    document.onfocusout = onPageBlur;
} else if (/*@cc_on!@*/false) {
    document.onfocusin = onPageFocus;
    document.onfocusout = onPageBlur;
} else {
    window.onfocus = onPageFocus;
    window.onblur = onPageBlur;
}

我想您可以在mousestop上启动一个计时器,它是document.onmousemove事件处理程序中的一个处理程序函数

document.onmousemove = (function() {var onmousestop = function() {
/* do stuff */}});

然后在一分钟或任何时间后,刷新页面。

窗口对象在大量事件上具有
模糊
聚焦
事件

function checkActivity() {

if(pageFocused == false){
   location.reload(true);
}

您可以将一个事件处理程序附加到
blur
事件以开始定期刷新,并将另一个附加到
focus
以停止刷新。这非常简单,只需在
blur
中执行
setInterval
,保存intervalID,然后在
focus
事件处理程序中使用
clearInterval
停止刷新轮询。

通过检测鼠标移动和按键来跟踪用户在页面上的活动(对于不使用鼠标的用户),并将页面焦点放在页面上,因为我认为模糊事件不适用于您在文档/页面级别执行的操作。原因是模糊事件似乎仅在您返回选项卡时调用,而不是在您实际离开页面时调用

每当发生这些事件(鼠标悬停、按键或页面焦点)时,将页面焦点重置为true

var pageFocused = false;

function onPageFocus(){
   pageFocused = true;
}
然后每30秒运行一个函数,查看是否有任何更改。这将每30秒(30000毫秒)运行一个名为checkActivity的函数

在该函数中,如果在30秒内没有任何活动,请重新加载页面

function checkActivity() {

if(pageFocused == false){
   location.reload(true);
}

然后,页面将重新加载,并将pageFocused设置为false,然后为您重新开始整个过程。

您的问题没有太多意义。如果页面上没有人,有什么必要不断刷新它。事实上,当没有人查看它时,它会刷新到哪个屏幕。@stevecomrie:他是这么说的当页面没有焦点时,应该定期刷新页面。这可能是因为选择了另一个选项卡,也可能是因为选择了另一个应用程序/窗口。亲爱的SteveComrie,谢谢你的评论。这对你来说可能没有任何意义,但在我正在处理的应用程序中确实有很大意义。谢谢。你为什么要刷新页面用户离开页面时的年龄?页面没有显示(因为用户离开了页面),因此刷新似乎毫无意义。嗯,是的,我需要一个跨浏览器的解决方案。让我想想这个问题。我认为这一切都取决于“页面上”的含义。但这些是真正“页面上”的正确事件。@Mattk311-基本上“在页面上"表示页面内容对用户可见且具有焦点时。模糊事件在您将选项卡从网页上移开然后返回网页之前不会触发,因此我不认为模糊事件是您希望用作多选项卡浏览器解决方案的内容。至少在IE 7中,它似乎是这样工作的。只是更新了我的问题,尝试将其设置为mo重新澄清“在页面上”我在你的函数中加入了一些javascript警报,以查看它们何时被调用,而页面模糊似乎没有被正确调用。当你转到另一个选项卡时,模糊不会被调用,直到你将选项卡从页面上取下,然后再返回到页面。因此,换句话说,我不会使用它。下面是一个使用、实时和实时彩色的示例。