Есть ли способ обнаружить, что окно в настоящее время активно в IE8? - PullRequest
10 голосов
/ 09 марта 2012

Есть ли способ определить, что окно в данный момент активно (отображается на активной вкладке / окне) в IE8?

Я знаю, что есть такие события, как onfocusin / onfocus - но это не идеальное решение, так как окно должно также получать фокус для события, которое будет запущено - поэтому это не работает, когда пользователь просто переключает вкладки, не касаясь самого окна.

Я считаю, что для такого обычного варианта использования должно быть какое-то простое, элегантное решение.

Ответы [ 4 ]

12 голосов
/ 09 марта 2012

Я написал плагин jQuery, который делает это: http://mths.be/visibility Он дает вам очень простой API, который позволяет вам выполнять обратные вызовы при изменении состояния видимости страницы.

Это делается с помощьюиспользуя API видимости страницы , где он поддерживается, и возвращаясь к старым добрым focus и blur в старых браузерах.

Демонстрация: http://mathiasbynens.be/demo/jquery-visibility

Этот плагин просто предоставляет два пользовательских события для использования: show и hide.При изменении состояния видимости страницы будет вызвано соответствующее событие.

Вы можете использовать их отдельно:

$(document).on('show', function() {
  // the page gained visibility
});

… и…

$(document).on('hide', function() {
  // the page was hidden
});

Поскольку большинствокогда вам понадобятся оба события, лучше всего использовать карту событий.Таким образом, вы можете связать оба обработчика событий за один раз:

$(document).on({
  'show': function() {
    console.log('The page gained visibility; the `show` event was triggered.');
  },
  'hide': function() {
    console.log('The page lost visibility; the `hide` event was triggered.');
  }
});

Плагин определит, поддерживается ли API видимости страницы в браузере или нет, и предоставит эту информацию как логическое значение (* 1031).* / false) в $.support.pageVisibility:

if ($.support.pageVisibility) {
  // Page Visibility is natively supported in this browser
}
2 голосов
/ 09 марта 2012

var isActive = false;
function onBlur() {
    isActive = false;
};
function onFocus(){
    isActive = true;
};

if (/*@cc_on!@*/false) { // check for Internet Explorer
    document.onfocusin = onFocus;
    document.onfocusout = onBlur;
} else {
    window.onfocus = onFocus;
    window.onblur = onBlur;
}

0 голосов
/ 02 июля 2014
<script>

    // Adapted slightly from Sam Dutton
    // Set name of hidden property and visibility change event
    // since some browsers only offer vendor-prefixed support
    var hidden, state, visibilityChange; 
    if (typeof document.hidden !== "undefined") {
        hidden = "hidden";
        visibilityChange = "visibilitychange";
        state = "visibilityState";
    } else if (typeof document.mozHidden !== "undefined") {
        hidden = "mozHidden";
        visibilityChange = "mozvisibilitychange";
        state = "mozVisibilityState";
    } else if (typeof document.msHidden !== "undefined") {
        hidden = "msHidden";
        visibilityChange = "msvisibilitychange";
        state = "msVisibilityState";
    } else if (typeof document.webkitHidden !== "undefined") {
        hidden = "webkitHidden";
        visibilityChange = "webkitvisibilitychange";
        state = "webkitVisibilityState";
    }
    // Add a listener that constantly changes the title
    document.addEventListener(visibilityChange, function() {
        document.title = document[state];
    }, false);

    // Set the initial value
    document.title = document[state];

</script>
0 голосов
/ 09 марта 2012

Это простая задача , которую можно выполнить с помощью jQuery:

$(function() {
    window.isActive = true;
    $(window).focus(function() { this.isActive = true; });
    $(window).blur(function() { this.isActive = false; });
});

Глобальная переменная isActive определяет, активна ли вкладка / окно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...