最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

javascript - Detect when a browser page window loses focus with Alt-Tab using pure JS or jQuery - Stack Overflow

programmeradmin3浏览0评论

Is it possible to detect current page is in alt-tab? This code works only if a new tab in browser is opened:

(function() {
  var hidden = "hidden";

  // Standards:
  if (hidden in document)
    document.addEventListener("visibilitychange", onchange);
  else if ((hidden = "mozHidden") in document)
    document.addEventListener("mozvisibilitychange", onchange);
  else if ((hidden = "webkitHidden") in document)
    document.addEventListener("webkitvisibilitychange", onchange);
  else if ((hidden = "msHidden") in document)
    document.addEventListener("msvisibilitychange", onchange);
  // IE 9 and lower:
  else if ("onfocusin" in document)
    document.onfocusin = document.onfocusout = onchange;
  // All others:
  else
    window.onpageshow = window.onpagehide
    = window.onfocus = window.onblur = onchange;

  function onchange (evt) {
    var v = "visible", h = "hidden",
        evtMap = {
          focus:v, focusin:v, pageshow:v, blur:h, focusout:h, pagehide:h
        };

    evt = evt || window.event;
    if (evt.type in evtMap)
      document.body.className = evtMap[evt.type];
    else
      document.body.className = this[hidden] ? "hidden" : "visible";
  //console.log(this[hidden] ? "hidden" : "visible");
  }

  // set the initial state (but only if browser supports the Page Visibility API)
  if( document[hidden] !== undefined )
    onchange({type: document[hidden] ? "blur" : "focus"});
})();

But this code does detect neither new window of the browser nor alt-tab into any other programm. Is it possible to detect it? Or in jQuery?

EDIT New page means Ctrl(cmd)+N (new window) hotkey. The code above can not detect this. Alt(cmd)+tab to another program - impossible to detect too. The code above can only detect Ctrl(cmd)+T (new tab)

EDIT I want to detect when a user return to my site from another application. That is, if a user closes any tab (e.g., by Ctrl+W) and returns to my site I can detect this action using the script above. But if a user returns to my site from another application (e.g., by Alt+Tab) the script doesn't work because window.onfocus will not be fired! That is,

 window.onpageshow =
 window.onpagehide = window.onfocus = window.onblur 

doesn't work for Alt+Tab action. Is it more clear?

Is it possible to detect current page is in alt-tab? This code works only if a new tab in browser is opened:

(function() {
  var hidden = "hidden";

  // Standards:
  if (hidden in document)
    document.addEventListener("visibilitychange", onchange);
  else if ((hidden = "mozHidden") in document)
    document.addEventListener("mozvisibilitychange", onchange);
  else if ((hidden = "webkitHidden") in document)
    document.addEventListener("webkitvisibilitychange", onchange);
  else if ((hidden = "msHidden") in document)
    document.addEventListener("msvisibilitychange", onchange);
  // IE 9 and lower:
  else if ("onfocusin" in document)
    document.onfocusin = document.onfocusout = onchange;
  // All others:
  else
    window.onpageshow = window.onpagehide
    = window.onfocus = window.onblur = onchange;

  function onchange (evt) {
    var v = "visible", h = "hidden",
        evtMap = {
          focus:v, focusin:v, pageshow:v, blur:h, focusout:h, pagehide:h
        };

    evt = evt || window.event;
    if (evt.type in evtMap)
      document.body.className = evtMap[evt.type];
    else
      document.body.className = this[hidden] ? "hidden" : "visible";
  //console.log(this[hidden] ? "hidden" : "visible");
  }

  // set the initial state (but only if browser supports the Page Visibility API)
  if( document[hidden] !== undefined )
    onchange({type: document[hidden] ? "blur" : "focus"});
})();

But this code does detect neither new window of the browser nor alt-tab into any other programm. Is it possible to detect it? Or in jQuery?

EDIT New page means Ctrl(cmd)+N (new window) hotkey. The code above can not detect this. Alt(cmd)+tab to another program - impossible to detect too. The code above can only detect Ctrl(cmd)+T (new tab)

EDIT I want to detect when a user return to my site from another application. That is, if a user closes any tab (e.g., by Ctrl+W) and returns to my site I can detect this action using the script above. But if a user returns to my site from another application (e.g., by Alt+Tab) the script doesn't work because window.onfocus will not be fired! That is,

 window.onpageshow =
 window.onpagehide = window.onfocus = window.onblur 

doesn't work for Alt+Tab action. Is it more clear?

Share Improve this question edited Dec 20, 2015 at 18:54 Vyacheslav asked Dec 20, 2015 at 17:06 VyacheslavVyacheslav 27.2k21 gold badges122 silver badges208 bronze badges 5
  • What does current page is an alt-tab mean? – jfriend00 Commented Dec 20, 2015 at 17:09
  • @jfriend00 , updated – Vyacheslav Commented Dec 20, 2015 at 17:12
  • I'm still not clear on what you want, but what about using focusout event on the <body> element. (You'd have to use jQuery to support Firefox.) – Stephen Thomas Commented Dec 20, 2015 at 17:56
  • @StephenThomas, updated. – Vyacheslav Commented Dec 20, 2015 at 18:55
  • While this solution may work on it's own, it fails when checking through an iframe because under certain circumstances the parent gets the focus instead of the frame, therefore none of the focus events get detected. – Ivan Commented Jan 31, 2020 at 18:38
Add a comment  | 

2 Answers 2

Reset to default 20

You can simply use the onfocus event on window, like in:

window.onfocus = function() {
  console.log('Got focus');
}

If needed, you can also use onblur for a more acute handling.

There is a Page Visibility API available: https://developer.mozilla.org/en-US/docs/Web/API/Page_Visibility_API

document.addEventListener("visibilitychange", handleVisibilityChange, false)
发布评论

评论列表(0)

  1. 暂无评论