检查窗口是否有焦点

17 javascript jquery

我需要检查用户是否有焦点窗口,我现在正在这样做:

var isonfocus=true;  
window.onblur = function(){  
  isonfocus=false;  
}  
window.onfocus = function(){  
  isonfocus=true;  
}
Run Code Online (Sandbox Code Playgroud)

每当我需要检查用户是否有焦点窗口我就是这么做的if(isonfocus==true).

问题:如果用户在页面加载之前失去焦点,即使我这样做 if(isonfocus==true)也会返回true,即使窗口不在焦点上,并且将var定义为false var isonfocus=false;也会反过来.

有人能帮我吗?谢谢.

更新
想象一下PTC(付费点击)网站,当您点击要查看的广告时,大多数网站都会验证用户是否实际看到了广告客户网站(有焦点)还是没有(失去焦点).
这与我需要的类似,我需要一种方法来验证用户是否在焦点上有窗口(包含iframe).
要获得焦点,用户可以单击iframe,文档或选项卡.
请注意,这需要适用于所有主流浏览器.

Jam*_*mes 49

为什么不使用hasFocus方法,例如

if (document.hasFocus()) {
    ...
}
Run Code Online (Sandbox Code Playgroud)

如果你需要处理iframe,那么你的支票就变成了或者例如

function isFocused() {
    return document.hasFocus() || document.getElementById('iframe').contentWindow.document.hasFocus();
}
Run Code Online (Sandbox Code Playgroud)

  • 我需要检查窗口是否有焦点,而不是文档. (5认同)

Dhi*_*ish 10

您可以document.visibilityState用来知道页面是否在焦点.

  • 不幸的是,这不是真的。除非页面由于最小化窗口而完全处于屏幕外,或者用户位于同一窗口的不同选项卡中,或者显示关闭,否则“ visibilityState”是“可见的”。仅仅被另一个窗口遮挡仍然算作“可见”。 (2认同)

小智 5

var has_focus = true;

function loading_time() {
    $(":focus").each(function() {
      if($(this).attr("id")=="iframeID") has_focus = true;
    });

    if(has_focus==true) alert('page has focus');
    else alert('page has not focus');

    setTimeout("loading_time()", 2000);
}

window.onblur = function(){  
    has_focus=false;  
}  
window.onfocus = function(){  
    has_focus=true;  
}

$(window).load(function(){
    setTimeout("loading_time()", 2000);
});
Run Code Online (Sandbox Code Playgroud)

为了提高效率,您需要var has_focus = false;使用户单击页面上的某处。