- PVSM.RU - https://www.pvsm.ru -

Выбор активной вкладки на Javascript

Иногда встречаются задачи, когда желательно не выполнять действия на сайте в нескольких вкладках одновременно.

Это включает в себя различные глобальные уведомления, особенно в случае, если они вызывают проигрывание звуков или другие жестокие по отношению к пользователю, либо тяжелые операции (в случае одновременного их выполнения в десятке-другой вкладок).

С тех пор, как старые IE стали уходить со сцены, это стало выполнить намного проще.

JSON и localStorage доступны начиная с IE версии 8.
Общее покрытие — примерно 93.96%:
caniuse.com/#feat=namevalue-storage [1]
caniuse.com/#feat=json [2]

Предлагаю вашему вниманию легкий скрипт, предоставляющий следующий интерфейс:

if (olamedia.leader && olamedia.leader.isLeader()){
    // здесь выполняются общие для вкладок операции
}

if (olamedia.leader){
    olamedia.leader.onChange(function(leader){
        console.log('Новый лидер', leader);
    });
}

Проверка доступности (доступен если есть поддержка JSON и localStorage):

if (olamedia.leader){
}

Скрипт отслеживает активность, подписываясь как на старые события типа фокуса окна, нажатия клавиш, наведение мыши, так и новейшие, такие как visibilitychange. При этом запись в localStorage (список нужен для мгновенного выбора лидера при закрытии одной из вкладок) осуществляется не чаще, чем раз в 10 секунд, если вкладка уже выбрана.
Закрытие окна отслеживается с помощью beforeunload.

Лицензия MIT.

github.com/olamedia/leader-js [3]
github.com/olamedia/olamedia-js [4] (зависимость/пространство имен, MIT)


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/pesochnitsa/86003

Ссылки в тексте:

[1] caniuse.com/#feat=namevalue-storage: http://caniuse.com/#feat=namevalue-storage

[2] caniuse.com/#feat=json: http://caniuse.com/#feat=json

[3] github.com/olamedia/leader-js: https://github.com/olamedia/leader-js

[4] github.com/olamedia/olamedia-js: https://github.com/olamedia/olamedia-js