Как запретить использовать веб приложение с больше одной вкладки в браузере?
Добрый день. Нужна такая функция. Я хочу чтобы пользователь имел доступ к моему сайту (или определенной части его функционала), только в случае если сайт открыт с одной вкладки. Если же пользователь имеет уже открытый сайт на одной вкладке, и открывает вторую, надо чтобы на первой ограниченная часть функционала ставала недоступной. Как это сделать? В частности, интересует как этого можно достичь используя JS?
Написать Shared Web Worker.
Подписаться на сообщения от него: он может прислать команду «деактивируйся!» (и «активируйся снова!» – в сложном варианте).
При старте отправлять в него сообщение, регистрирующее вкладку по уникальному ID. Случайное-уникальное, хранится в скрипте во вкладке, запоминается и в воркере.
Воркер по такому сообщению принимает новый ID и деактивирует остальные (отправляет им сообщения).
Принцип «каждый новый побеждает предыдущих».
Если нужно реализовать возврат полномочий к предыдущей вкладке, когда закрыли «активную» – можно придумать протокол. Воркер может по очереди пинговать ID вкладок: «жив?» – нет (таймаут) – следующий «жив?» – жив — «будешь главным».
Самый простой вариант это через localStorage. При открытии вкладки генерируешь id вкладки. Добавляешь цикл в N времени и обновляешь. Если владыку закрыть, то цикл прервется.
Там же добавляешь такой же цикл, но уже на проверку, нет ли других вкладок, которые обновляют время в localStorage
жаль, Broadcast Channel API в Safari не поддерживается — вся яблотехника в пролёте.
А контекст может быть вполне мирный: например воспроизведение аудио-потока интернет-радиостанции.