Как выполнить функцию перед закрытием/перезагрузкой страницы
Здравствуйте. Требуется по умолчанию сохранять в базе данных настройки пользователя, когда он закрывает или обновляет страницу. window.onbeforeunload и unload не срабатывают. То есть onbeforeunload срабатывает, если выводить предупредительное сообщение, а просто молча функцию не выполняет. Есть какие-нибудь методы осуществить желаемое?? Буду очень благодарна за советы.
|
В таком случае при любом изменении нужно сохранять настройки вне зависимости от перезагрузки или ухода с сайта.
|
Тут нет логики в onbeforeunload и описанной задаче. Юзер останется на странице - и что? Значит не ушел, значит сохраняли в бд зря, он еще поменяет что-то и опять не получится сохранить.
Все, да, сохраняется по событиям, а не в конце как в екзеле. Делается на самом деле проще. Без аякса-шмаякса через куки. Сохранили в куках - они на клиенте лежат. Перезагружаем страницу - идет запрос к серверу. Сервер берет те же самые куки, проверяет все и сохраняет в бд, затем из бд читает или кеширует что найдено в куках и согласно настроек отдает пагу. |
Цитата:
|
В смысле узнать где руки юзера? не зависли ли пальцы над комбинацией кнопок alt+f4, или вы уверены что нормальный человек никогда мыш из них не выпустит?
Вам дали правильный ответ. Чтобы не гонять аякс по каждому чиху, сохраняете все через json в куказ и все. Сервер сохавает перед выдачей паги в следующей сессии и все будет выглядеть как оставлено. |
Цитата:
|
Аборигены съедят?
Куда они денутся? По кукам деньги зарабатывают, а тут какие-то иконки, блин. |
Куки могут храниться до 9999 года. Этого достаточно? Ну вот.
Гоняйте аяксом запросы, не должно быть там проблем. Социал весь так работает. Ну или заведите кнопку или меню Сохранить настройки. |
у куки же есть срок действия? к тому же их можно удалить, нажав на соответствующую кнопку в браузере
|
Срок действия устанавливает разработчик, максимальный - 9999 год. Что касается удаления куков, то у ваших пользователей все равно нет столько извилин чтобы открыть настройки браузера. Но самая мякотка - как они потом залогиняться к вам на сайт удалив куки? Никто их не удаляет, не переживайте. О них даже никто не знает кроме нас с вами.
|
Я бы вам даже посоветовал вообще ничего не сохранять в бд. Попробуйте - увидите что это - лишнее.
В теории да, могут быть такие коллизии, типа в гаме какой-нить написано "почитите куки". Юзер идет спрашивать знающих как это сделать, те ему рассказывают какую кнопку нажать, он чистит, ура, гама прочихалась. Назавтра оказывается никуда нельзя зайти - куки-то сдохли. Начинается поиск паролей в браузере, что найдено то найдено. Но в следующий раз юзер уже не будет так просто нажимать всякие кнопки. Ему одного раза хватит. Вот вы лично давно их удаляли? Еще есть вариант что юзер зайдет инкогнито. Тогда никаких куков сервер не увидит вообще. Логин будет работать и все что сохранено в бд - будет, а кукотехника - отвалится. Но опять же - кто так вообще сделает? Ну и главное - тот кто удалит куки - сам дурак. |
Цитата:
|
А по поводу автоматического сохранения расположения иконок без всяких тыков по кнопкам меню - это пожелания клиентов, так что интересно было бы узнать, что еще можно было бы в этом направлении сделать?
|
С куками еще есть ограничение по размеру. Если туда еще писать json и юникод - то много не запишешь. На такие случаи есть локальная бд. Про нее кроме нас вообще никто не знает и посмотреть что там не сможет.
|
Ничего тут нельзя сделать. Если страница - документ, то должна быть кнопка Save. Вы не можете ничего сделать толком в период между beforeunload и unload собственно. Это не десктоп. Юзер имеет право закрыть браузер и прекратить все процессы немедленно.
Галюники с этими фичами с некоторых пор наконец-то устранены во всех нормальных браузерах, что способствовало резкому уменьшению числа долбоящеров использовавших эти фичи во вред. |
Зато вы можете сохранить что угодно юзеру на локальный диск. Хоть всю страницу целиком. В локальной бд.
|
В парадигме веб-страницы как интерфейса БД, нет никакой разницы где эта бд находится в каждый момент времени. Используя запросы вы просто делаете ту самую репликацию - из локальной бд берете данные и сохраняете в серверной, а из серверной отдаете новые данные и сохраняете в локальной.
Браузер же может и локальные страницы открывать. То есть можно написать приложение для обычной дестктопной работы, любую бд вести по товарам или там чему угодно. Ну вот, собственно никакой разницы тут нет, ну, за небольшим исключением. Смехотура в том, что из браузера нельзя нормально работать с файлами - по соображениям безопасности. Поэтому вся работа ведется с namespace в локальной базе данных. КОторая конечно тоже файл, но со своим собственным интерфейсом. Еще смешнее что вы сами можете не знать сколько вам всякого барахла записывают на диск всякие сайты. Типа вы почистили куки, красота, никто про меня не знает - как бы не так. Там минимум дюжина способов обойтись без печенек. Ну вот, значит вам нужно найти любой из них и заюзать, чтоб куки не беспокоили. |
Понятно... Идея хорошая. Спасибо за ответы!
|
Часовой пояс GMT +3, время: 06:03. |