Javascript-在iFrame上失去和获得焦点

Javascript-在iFrame上失去和获得焦点,javascript,iframe,Javascript,Iframe,当用户在网站外单击时,会调用模糊,我会捕获一个焦点丢失事件。当用户点击网站时,会调用一个焦点,然后我捕获一个焦点获得事件 但是对于iframe,它的工作原理有点不同。对于iframe,它被视为另一个网站,“选项卡”。因此,我有以下听众: document.addEventListener('blur', function() { if (document.activeElement !== document.getElementsByTagName('iframe')[0]) {

当用户在网站外单击时,会调用模糊,我会捕获一个焦点丢失事件。当用户点击网站时,会调用一个焦点,然后我捕获一个焦点获得事件

但是对于iframe,它的工作原理有点不同。对于iframe,它被视为另一个网站,“选项卡”。因此,我有以下听众:

document.addEventListener('blur', function() {
    if (document.activeElement !== document.getElementsByTagName('iframe')[0]) {
        callback(isVisible(false));
    }
}, false);

document.addEventListener('focus', function() {
    callback(isVisible(true));
}, false);
这可以防止当您单击iframe导致焦点丢失时,但当您在网站/浏览器外部单击时,不会捕获任何事件,但只要您单击父对象,然后单击外部,它就会捕获焦点丢失事件


因此,我所需要的是,当活动元素是iframe并且在父网站外单击时,它应该捕获一个焦点丢失事件
isVisible(true)

我能找到的唯一方法是每隔几毫秒检查文档上的
hasFocus
。我选择了700毫秒

setInterval(t.checkFocus, 700);
checkFocus() {
  if ( document.hasFocus() ) {
    if (!this.inFocus) {
      analytics.focusGained(this);
      this.inFocus = true;
    }
  } else {
    if (this.inFocus) {
      analytics.focusLost(this);
      this.inFocus = false;
    }
  }
}

我能找到的唯一方法是每隔几毫秒检查文档上的
hasFocus
。我选择了700毫秒

setInterval(t.checkFocus, 700);
checkFocus() {
  if ( document.hasFocus() ) {
    if (!this.inFocus) {
      analytics.focusGained(this);
      this.inFocus = true;
    }
  } else {
    if (this.inFocus) {
      analytics.focusLost(this);
      this.inFocus = false;
    }
  }
}