Альтернатива для JavaScript onUnload - PullRequest
0 голосов
/ 29 августа 2009

есть альтернатива Javascript onUnload? Я использую JSP Jakarta Struts Framework с сервлетами .

Я должен знать, когда закрывается окно, потому что не каждый нажимает кнопку выхода из системы.
Как вы справляетесь с этим в своих приложениях?

Ответы [ 4 ]

5 голосов
/ 29 августа 2009

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

Событие unload, безусловно, является полезной подсказкой, поскольку оно обычно срабатывает, когда страница выгружается. Это совсем не надежно, однако. Есть множество ситуаций, когда он не срабатывает, и еще больше, когда даже если он срабатывает, ваш сервер останется в неведении.

Например: может произойти сбой браузера (или даже операционной системы) или может отключиться питание. Посетитель, использующий Wi-Fi, может отключиться или может нести свой iPhone в туннель во время использования вашего сайта.

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

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

Единственное существенное дополнение к этой схеме, которое мы видели в последнее время, - это использование JavaScript для визуального выхода пользователя из системы после истечения времени ожидания. Опять же, мы видим это на банковских сайтах: оставьте страницу открытой слишком долго, и когда вы вернетесь, все, что вы увидите, это экран входа в систему. (Конечно, это также зависит от JavaScript и поэтому все еще подвержено ошибкам.)

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

0 голосов
/ 14 августа 2018

Я использую onbeforeunload. См. Документацию

После тестирования он работает на Firefox , Chrome , IE11 и Edge .

Я не тестировал другой браузер ( список совместимости здесь )

0 голосов
/ 29 августа 2009

Я полагаюсь на тайм-аут сеанса сервлета для автоматического выхода из системы. Вы можете зарегистрировать обработчик на время ожидания сеанса для покрытия любой очистки учетных данных, которую вам нужно сделать. Хороший пример приведен здесь:

http://www.xyzws.com/Servletfaq/when-do-i-use-httpsessionlistener/7

Клиентская сторона не гарантирует, что пользователь всегда подтвердит, что он завершил работу с вашим сайтом.

0 голосов
/ 29 августа 2009

Вы должны знать, что Opera не выполняет onUnload, как вы подозреваете. И вам не следует полагаться на JavaScript, чтобы увидеть, закрывают ли пользователи окна.

...