Javascript показывает выгрузку только тогда, когда браузер закрыт

В настоящее время у меня есть веб-сайт, который использует систему, похожую на корзину, для временного хранения запросов. В настоящее время я использую функцию Javascript onunload, чтобы пользователь не мог покинуть страницу и потерять свои запросы в корзине.

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

Можно ли установить событие onunload на кнопку закрытия в браузере, чтобы оно показывалось только тогда, когда они пытаются его закрыть?

Я надеюсь, что мы сможем что-то найти, так как редизайн сайта на самом деле не вариант,

Спасибо


person Alex    schedule 14.03.2013    source источник
comment
Где хранятся временные запросы? Как они переходят на следующую страницу? Если вы сохраните их в хранилище сеансов, они будут доступны повсюду. сеанс и автоматически исчезнет при закрытии браузера/вкладки. Тогда не нужно использовать onunload.   -  person Useless Code    schedule 14.03.2013
comment
Они хранятся в сеансе, и на каждой странице есть элемент div, похожий на корзину, который просто загружает и форматирует сеанс. Сайт не открывает новые окна или вкладки.   -  person Alex    schedule 14.03.2013
comment
Когда вы говорите в сеансе, я предполагаю, что из вашего комментария ниже вы имеете в виду сеанс PHP? Было бы полезно быть более конкретным, поскольку вы не упомянули PHP в вопросе и не пометили его PHP.   -  person Useless Code    schedule 14.03.2013
comment
О да. Сеанс PHP, извините, я не подумал, поскольку изначально он не был о PHP. Элементы помещаются в массив в сеансе.   -  person Alex    schedule 14.03.2013


Ответы (1)


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

Например, в событии onclick или onsubmit для кнопки «Далее» на каждой странице корзины вы можете установить глобальную переменную, указывающую, что вы должны позволить пользователю уйти со страницы. И затем в событии onunload вы должны проверить, был ли установлен этот глобальный параметр, показывая только предупреждение, если это не так.

person grc    schedule 14.03.2013
comment
Блестящий комментарий, я должен был подумать об этом! Интересно, замедлит ли добавление в php новую переменную для перехвата URL-адреса, и это может скрыть или показать javascript? Если это имеет смысл.. - person Alex; 14.03.2013
comment
Это не должно быть глобальным, если вы инкапсулируете переменную и все обработчики, которые ее используют, в одной и той же самовызывающейся функции. Лучше не раскрывать глобальные переменные в JS, если вам это не нужно, особенно если вы когда-либо будете использовать JS, написанный кем-то другим на вашей странице (JS-библиотеки, социальные виджеты и т. д.). - person Useless Code; 14.03.2013