onblur和onfocus事件但使用iframe

时间:2016-04-27 15:54:51

标签: javascript

我正在创建一个应用程序,当另一个人正在查看窗口时,该应用程序将从一台计算机与另一台计算机进行通信。例如,想象一下你正在与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中时,会触发onb​​lur事件,它看起来像用户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相同......

非常感谢, 亚历

1 个答案:

答案 0 :(得分:0)

你可以这样检查。我在我的代码中使用了jquery btw。

$(window).blur(function () {
  if ($('iframe').is(':focus')) {
    ...
  } else {
   ...
  }                
});