如何检测浏览器标签是否集中在顶部?

时间:2016-08-05 11:16:29

标签: javascript jquery html iframe browser

我有一个页面可以为用户打开word文档。在页面后面,有一个等待对话框'当用户关闭打开的文档时,呈现为关闭。 我做了一些挖掘,但我没有找到可行的解决方案。

我当然选中了这个:Is there a way to detect if a browser window is not currently active?,但只有在我切换标签或最小化浏览器窗口时才会有效。它没有检测到浏览器打开了一个带文件的窗口,浏览器也没有收回焦点,因为带有文件的窗口已关闭。

我在IE11上测试了上述解决方案(以及其他我所知道的,主要集中在连接焦点事件上)。一个复杂的可能是新窗口是从iframe中的iframe打开的(不要问,我不能改变:()),但是我使用的是window.top,还检查了窗口.top.document.hidden值,一直都是假的。

编辑:How to tell if browser/tab is active - 这个问题也没有解决问题。正如我之前提到的,可能是因为这些iframe(我使用window.top来附加事件,但仍然没有效果):

结构:

    • Iframe触发操作创建文件
    • iframe实施创建文件
    • iframe添加要存储的文件,并打开新窗口

用于实现此操作的Java脚本包含在所有iframe中以及页面中。我知道这可能是模糊的解释,推荐的解决方案是改变这个Web应用程序的架构...

1 个答案:

答案 0 :(得分:1)

          var vis = (function(){
            var stateKey, 
                eventKey, 
                keys = {
                        hidden: "visibilitychange",
                        webkitHidden: "webkitvisibilitychange",
                        mozHidden: "mozvisibilitychange",
                        msHidden: "msvisibilitychange"
            };
            for (stateKey in keys) {
                if (stateKey in document) {
                    eventKey = keys[stateKey];
                    break;
                }
            }
            return function(c) {
                if (c) document.addEventListener(eventKey, c);
                return !document[stateKey];
            }
        })();


        vis(function(){

            if(vis()){

                // tween resume() code goes here    
            setTimeout(function(){            
                    console.log("tab is visible - has focus");
                },300);     

            } else {

                // tween pause() code goes here
                console.log("tab is invisible - has blur");      
            }

        });