Если требуется, чтобы это длилось до тех пор, пока открыто окно браузера, вы столкнетесь с повторяющимися проблемами, поскольку браузеры больше не работают на этом уровне - есть уровень вкладок и уровень домена (сохраняется, как файлы cookie ). Окно браузера - это просто набор вкладок, если вы специально не настроили свой браузер определенным образом (чтобы удалить файлы cookie и данные сеанса при закрытии и не передавать данные между экземплярами окна). Однако это настройка браузера (и даже не стандартная для разных браузеров), а не то, что вы можете контролировать на стороне клиента.
Если вы готовы рассмотреть некоторые альтернативы, которые обеспечат требуемый конечный результат, если не тем конкретным способом, который вы указали, прочтите:
Чтобы развернуть исходный комментарий AkshayJ, используйте localStorage, поскольку sessionStorage всегда зависит от вкладки (его нельзя использовать совместно).
Чтобы сбросить флаг, в рамках той же функциональности, которая устанавливает флаг, добавьте событие onunload на вкладку, воспроизводящую видео, которое очистит его, когда вкладка закрывается или расположение окна перемещается от видео. Это обеспечит большую функциональность, чем вы изначально запрашивали, потому что в вашем исходном случае пользователю придется полностью закрыть браузер, прежде чем он сможет снова воспроизвести видео, даже если вкладка, на которой воспроизводилось видео, давно исчезла или перешла на другая страница.
ОБНОВИТЬ:
Если безопасность / авторизация вокруг этого имеет первостепенное значение (а не просто желание остановить это случайно), то использование localStorage - совершенно неправильный подход - эти данные и их существование в конечном итоге контролируются пользователем. Они могут удалить его или настроить свой браузер так, чтобы экземпляры окон не обменивались данными, поэтому все, что им нужно сделать, это открыть новое окно, чтобы просмотреть ваше видео дважды одновременно. Решительный пользователь найдет способ обойти это за считанные минуты.
Если вы хотите полностью контролировать его, вы должны взять эту сторону домена, а не полагаться на хранилище браузера, и использовать какой-либо другой тег, например список текущих IP-адресов или какой-либо другой метод идентификации уникального пользователя, чтобы определить, видео можно воспроизводить или нет. Имейте в виду, что у вас могут возникнуть те же проблемы, что и раньше, относительно того, когда снимать флаг, будь то сторона браузера или сторона домена.
ОБНОВИТЬ:
re: какое событие использовать, похоже, что onunload и onbeforeunload полностью поддерживаются во всех распространенных браузерах (ref: Здесь и Здесь). В этом ответе рекомендуется использовать оба варианта, чтобы быть в безопасности.
ОБНОВИТЬ:
OP выразил беспокойство по поводу того, что события разгрузки ненадежны и что пользователь может навсегда остаться заблокированным, если что-то пойдет не так. Лично я не испытал здесь ненадежности, но если вы беспокоитесь, введите аспект тайм-аута. Попросите вкладку, воспроизводящую видео, обновлять флаг (где бы он ни был) с отметкой времени каждые 30 секунд / 1 минуту / что угодно. Затем, когда загружается новый экземпляр страницы, пусть он проверяет метку времени. если что-то произошло с существующей страницей, так что она заморозила и события выгрузки не запустились, метка времени будет устаревшей, потому что она также перестала обновляться, поэтому вам просто нужно проверить, устарела ли метка времени как проверка на присутствие.
person
Ieuan Stanley
schedule
08.12.2015