0

到目前为止,我们有这样的要求,比如每当用户在页面上处于活动状态时,我们都需要自动刷新该页面。每当用户在另一个窗口上最小化/活动时,我们需要停止自动刷新。

用户提出了新的要求。只要用户可见,我们就需要自动刷新页面。就像我水平/垂直设置了 2 个窗口,这样我就可以在一个窗口上工作并可以查看另一个窗口。我怎样才能实现这个功能?

提前致谢。

4

2 回答 2

0

尝试这样的一些来检测可见性:

var state='';



    (function() {
        var hidden, change, vis = {
                hidden: "visibilitychange",
                mozHidden: "mozvisibilitychange",
                webkitHidden: "webkitvisibilitychange",
                msHidden: "msvisibilitychange",
                oHidden: "ovisibilitychange" /* not currently supported */
            };             
        for (hidden in vis) {
            if (vis.hasOwnProperty(hidden) && hidden in document) {
                change = vis[hidden];
                break;
            }
        }
        if (change)//this is for detecting without  focus, so it works for your second requirement
            document.addEventListener(change, onchange);
        else if (/*@cc_on!@*/false) // IE 9 and lower
            document.onfocusin = document.onfocusout = onchange
        else
            window.onfocus = window.onblur = onchange;

        function onchange (evt) {
            var body = document.body;
            evt = evt || window.event;

            if (evt.type == "focus" || evt.type == "focusin")
           {   
        body.className = "visible";
           state='visible';
            }         else if (evt.type == "blur" || evt.type == "focusout")
            {  body.className = "hidden";     state='';}
                else    {    
                body.className = this[hidden] ? "hidden" : "visible";}
        }

    })();


function timeout_trigger() {
if(state=='visible')
{
//    window.open('PAGE','_SELF'); OR some ajax  
}
}


    setTimeout('timeout_trigger()', 30000);

IE 9 及更低版本需要 onfocusin 和 onfocusout,而所有其他版本都使用 onfocus 和 onblur。

于 2012-09-17T10:24:49.640 回答
0

看看这个答案:JavaScript / jQuery: Test if window has focus for a method to determine if window has focus。

setInterval上面示例的部分中,您可以添加代码来刷新页面。

你可以添加一个电话到

location.reload();

用于刷新页面

于 2012-09-17T10:09:35.367 回答