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

в 10:33, , рубрики: Песочница, метки: , ,

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

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

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

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

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

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
github.com/olamedia/olamedia-js (зависимость/пространство имен, MIT)

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js