Как запретить использовать веб приложение с больше одной вкладки в браузере?
Написать Shared Web Worker.
Подписаться на сообщения от него: он может прислать команду «деактивируйся!» (и «активируйся снова!» – в сложном варианте).

При старте отправлять в него сообщение, регистрирующее вкладку по уникальному ID. Случайное-уникальное, хранится в скрипте во вкладке, запоминается и в воркере.

Воркер по такому сообщению принимает новый ID и деактивирует остальные (отправляет им сообщения).
Принцип «каждый новый побеждает предыдущих».

Если нужно реализовать возврат полномочий к предыдущей вкладке, когда закрыли «активную» – можно придумать протокол. Воркер может по очереди пинговать ID вкладок: «жив?» – нет (таймаут) – следующий «жив?» – жив — «будешь главным».
Самый простой вариант это через localStorage. При открытии вкладки генерируешь id вкладки. Добавляешь цикл в N времени и обновляешь. Если владыку закрыть, то цикл прервется. 
Там же добавляешь такой же цикл, но уже на проверку, нет ли других вкладок, которые обновляют время в localStorage