我正在创建一个应用程序,当另一个人正在查看窗口时,该应用程序将从一台计算机与另一台计算机进行通信。例如,想象一下你正在与Facebook聊天的人聊天,另一个人改变标签,或alt +标签或其他东西 - 另一个人会知道(不是具体细节,只是facebook窗口不在顶部且活跃)。
这最终很容易:
/**
* Functions which keeps track of whether the page is the active tab
* this reports back to the host
*/
window.onblur=function(){
if(conn!=null) {
conn.send(JSON.stringify({'type':'upd','ele':'vis','status':0}));
}
make_noise('0000');
};
window.onfocus=function(){ // when you focus the window
if(conn != null) {
conn.send(JSON.stringify({'type':'upd','ele':'vis','status':1}));
}
stop_noise('0000');
};
这一切都有效,没问题。
但是我在页面上也有一个iframe。当用户在iframe中时,会触发onblur事件,它看起来像用户alt + tabbed,转到另一个标签等。
我试过这个来解决:
window.onblur=function(){ // when you leave the window
if(conn != null && (document.activeElement != document.getElementById("content_frame"))) {
conn.send(JSON.stringify({'type':'upd','ele':'vis','status':0}));
}
}
make_noise('0000');
};
但是因为iframe保持activeElement,无论窗口当前是否处于活动状态,都会导致误报。
有人可以想办法解决这个问题吗? $('iframe')。is(':focus')被建议作为测试iframe焦点的一种方式,但它的工作原理与activeElement相同......
非常感谢, 亚历
答案 0 :(得分:0)
你可以这样检查。我在我的代码中使用了jquery btw。
$(window).blur(function () {
if ($('iframe').is(':focus')) {
...
} else {
...
}
});