Javascript 检查窗口是否有焦点

Javascript 检查窗口是否有焦点,javascript,jquery,Javascript,Jquery,我需要检查用户是否有聚焦窗口,我目前正在执行以下操作: var isonfocus=true; window.onblur = function(){ isonfocus=false; } window.onfocus = function(){ isonfocus=true; } 每当我需要检查用户是否有焦点窗口时,我只要做if(isonfocus==true) 问题:如果用户在页面加载之前失去焦点,即使我这样做了 if(isonfocus==true)它将返

我需要检查用户是否有聚焦窗口,我目前正在执行以下操作:

var isonfocus=true;  
window.onblur = function(){  
  isonfocus=false;  
}  
window.onfocus = function(){  
  isonfocus=true;  
}
每当我需要检查用户是否有焦点窗口时,我只要做
if(isonfocus==true)

问题:如果用户在页面加载之前失去焦点,即使我这样做了
if(isonfocus==true)
它将返回true,即使窗口不在焦点上,并且将var定义为false
var isonfocus=false将执行相反的操作

有人能帮我吗?谢谢

更新
设想一个PTC(付费点击)网站,当你点击一个广告查看时,大多数网站都会验证用户是否真的看到了广告商网站(有焦点)或没有(失去焦点)。
这与我需要的类似,我需要一种方法来验证用户是否有聚焦窗口(其中包含iframe)。
为了获得焦点,用户可以单击iframe、文档或选项卡上的内容。
请注意,这需要在所有主要浏览器上运行。

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

if (document.hasFocus()) {
    ...
}

如果您还需要处理
iframe
,那么您的支票将变为或

function isFocused() {
    return document.hasFocus() || document.getElementById('iframe').contentWindow.document.hasFocus();
}

如果您不关心Opera支持,那么使用
document.hasFocus()
方法可能会获得更好的结果。请参阅以了解更多信息

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);
});
为了提高效率,您需要
var has\u focus=false
并让用户单击页面上的某个位置

跨浏览器jQuery解决方案 以下插件将通过IE、Chrome、Firefox、Safari等不同版本的标准测试。。并相应地建立您声明的方法。它还涉及以下问题:

  • 计时器!哎哟
  • onblur |.blur/onfocus |.focus“重复”呼叫
  • 窗口通过选择其他应用程序(如word)而失去焦点
    • 这往往是不可取的,因为如果您打开了一个银行页面,并且它的onblur事件告诉它屏蔽该页面,那么如果您打开计算器,您将无法再看到该页面
  • 页面加载时不触发
使用方法非常简单:

$.winFocus(function(event, isVisible) {
    console.log("Combo\t\t", event, isVisible);
});

//  OR Pass False boolean, and it will not trigger on load,
//  Instead, it will first trigger on first blur of current tab_window
$.winFocus(function(event, isVisible) {
    console.log("Combo\t\t", event, isVisible);
}, false);

//  OR Establish an object having methods "blur" & "focus", and/or "blurFocus"
//  (yes, you can set all 3, tho blurFocus is the only one with an 'isVisible' param)
$.winFocus({
    blur: function(event) {
        console.log("Blur\t\t", event);
    },
    focus: function(event) {
        console.log("Focus\t\t", event);
    }
});

//  OR First method becoms a "blur", second method becoms "focus"!
$.winFocus(function(event) {
    console.log("Blur\t\t", event);
},
function(event) {
    console.log("Focus\t\t", event);
});


/*开始插件*/
;;(函数($){$.winFocus | | |($.extend({winFocus:function(){var a=!0,b=[];$(document).data(“winFocus”){$.winFocus | | | | | | | |:| | ; document data.data(“winFocus”、$.winFocus.init());for(x in参数中的)“object”==参数的类型[x]?(参数[x]。blur&&&$.winFocus.blurFocus&$.winFocus.methods.blurFocus.push(参数[x].blurFocus),参数[x].initRun&(a=arguments[x].initRun)):“函数”==typeof arguments[x]?b.push(参数[x]):
“布尔”==typeof arguments[x]&&(a=arguments[x]);b&&(1==b.length?$.winFocus.methods.blur.push(b[0]):($.winFocus.methods.blur.push(b[0]),$.winFocus.methods.focus.push(b[1]);if(a)$.winFocus.methods.onChange()},$.winFocus.init=function(){.winFocus.props.hidden在文档中?document.addEventListener(“可视性”),$.winFocus.methods.onChange):($.winFocus.props.hidden=“mozHidden”)在文档?文档中添加的EventListener(“mozvisibilitychange”,$.winFocus.methods.onChange):($.winFocus.props.hidden=
文档?文档中的“webkitHidden”)addEventListener(“webkitvisibilitychange”,$.winFocus.methods.onChange):($.winFocus.props.hidden=“msHidden”)在文档?文档中addEventListener(“msvisibilitychange”,$.winFocus.methods.onChange):($.winFocus.props.hidden=“onfocusin”)在文档中?document.onfocusin=document.onfocusout=$.winFocus.methods.onChange:window.onpageshow=window.onpagehide=window.onfocus=window.onblur=$.winFocus.methods.onChange;return$.winFocus},$.winFocus.methods={blurFocus:[],blur:[],focus:[],focus,
exeCB:function(a){$.winFocus.methods.blurFocus&&$.each($.winFocus.methods.blurFocus,function(b,c){this.apply($.winFocus[a,!a.hidden]);a.hidden&&$.winFocus.methods.blur&&$.each($.winFocus.methods.blur,function(b,c){this.apply($.winFocus,[a]);!a.hidden&$.winFocus&$($.winFocus[a])},onChange:function(a){var b={focus:!1,focusin:!1,pageshow:!1,blur:!0,focusout:!0,pagehide:!0};if(a=a | | window.event)a.hidden=a.type in b?b[a.type]:
document[$.winFocus.props.hidden],$(window.data(“visible”,!a.hidden),$.winFocus.methods.exeCB(a);否则尝试{$.winFocus.methods.onChange.call(document,new Event(“visibilitychange”)}catch(c){},$.winFocus.props={hidden:“hidden”})(jQuery);
/*终端插件*/
//简单例子
$(函数(){
$.winFocus(函数(事件,可见){
$('td tbody').empty();
$。每个(事件、函数(i){
$('td tbody')。追加(
$('')。追加(
$('',{text:i}),
$('',{text:this.toString()})
)
)
});
如果(可见)
$(“#isVisible”).stop().delay(100).fadeOut('fast',函数(e){
$('body').addClass('visible');
$(this.stop().text('TRUE').fadeIn('slow');
});
否则{
$('body').removeClass('visible');
$(“#可见”).text('FALSE');
}
});
})
body{背景:#AAF;}
表{宽度:100%;}
表{边框折叠:折叠;边距:0自动;宽度:自动;}
tbody>tr>th{text align:right;}
td{宽度:50%;}
th,td{padding:.1em.5em;}
td-th,td-td{border:1px-solid;}
.visible{background:#FFA;}

有关返回的事件对象,请参见控制台
是可见的吗

正确

事件数据{有关详细信息,请参阅控制台}
您可以使用
document.visibilityState
来了解页面是否处于焦点状态。

如果用户的浏览器窗口处于焦点/活动状态,但刚刚单击了刷新按钮(或url栏等),
document.hasFocus()
将告诉您该窗口未处于活动状态

但是,您可以调用
window.focus()
并查看