ブラウザウィンドウが現在アクティブでないかどうかを検出する方法はありますか? 質問する

ブラウザウィンドウが現在アクティブでないかどうかを検出する方法はありますか? 質問する

定期的にアクティビティを実行する JavaScript があります。ユーザーがサイトを見ていないとき (つまり、ウィンドウまたはタブにフォーカスがないとき) は、実行しない方がよいでしょう。

JavaScript を使用してこれを行う方法はありますか?

私の参考ポイント: 使用しているウィンドウがアクティブでない場合、Gmail チャットでは音が鳴ります。

ベストアンサー1

この回答を最初に書いた後、 W3Cのおかげで新しい仕様が勧告ステータスに達しました。ページ可視性 API(の上翻訳) により、ページがユーザーに対して非表示になっていることをより正確に検出できるようになりました。

document.addEventListener("visibilitychange", onchange);

現在のブラウザのサポート:

  • Chrome 13以上
  • インターネットエクスプローラー10以上
  • Firefox 10以上
  • Opera 12.10+ [メモを読む]

次のコードは、互換性のないブラウザでは信頼性の低いぼかし/フォーカス メソッドにフォールバックします。

(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";
  }

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

onfocusinそしてonfocusoutIE 9以下で必要一方、 iOS を除く他のすべての OS ではonfocusと が使用されます。iOSではと が使用されます。onbluronpageshowonpagehide

おすすめ記事