- PVSM.RU - https://www.pvsm.ru -
Иногда встречаются задачи, когда желательно не выполнять действия на сайте в нескольких вкладках одновременно.
Это включает в себя различные глобальные уведомления, особенно в случае, если они вызывают проигрывание звуков или другие жестокие по отношению к пользователю, либо тяжелые операции (в случае одновременного их выполнения в десятке-другой вкладок).
С тех пор, как старые 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
Нажмите здесь для печати.