Здравствуйте. Я понимаю, что проблема тривиальна, но я что-то не могу найти, с какого бока подступиться. Описание проблемы: онлайн упражнения. Вот пример: https://itisenglish.ru/Trainer_folder/Trainer_Starter_D_7.html При нажатии на "Отправить рапорт" работает php-файл - из JS передается длинная такая строка (сложенные вместе все предложения, которые пользователь вводил) и php записывает ее в специальный текстовый файл - так что видно, что там студент навводил и где у него были ошибки. Но это только при нажатии на кнопку. Задача: записывать в текстовый файл все предложения, даже если студент не нажмет на кнопку, а просто бросит упражнение. Как раз тут интересно посмотреть - что не получалось. Решение 1 (не получается): Записывать суммированную строку в текстовый файл всегда перед закрытием окна. В JS прописываю Код (Javascript): window.onbeforeunload = writespyreport; function writespyreport () { document.location.href = "writespy.php"; } onbeforeunload в Хроме срабатывает только, если пользователь из этого же окна переходит по другому адресу, а при закрытии вкладки (окна) вообще не срабатывает (это не говоря о проблеме перехода на др страницу) Решение 2 Записывать предложение, введенное студентом каждый раз, когда он, введя предложение, жмет на "Проверить" Но! Тогда откроется php, а данные, введенные студентом и насчитанные до этого предложения (в одном упражнении их несколько) канут в лету. Подскажите, пожалуйста, как мне быть. С базами данных не работала и не оч хочется, потому что при записи в базу каждый раз идет авторизация, а текстовый файл легко записать и легко посмотреть его содержание. Я не программист.
Используйте событие change (.onchange) и отправляйте данные на сервер не сменой локации, а через ajax-запросы. А когда он нажмет на кнопку - можно сменить локацию.
Спасибо, за совет, но если бы я пользовалась и владела аяксом, и вопросов бы не было. Пойти освоить аякс - это задача как мин на месяц, а не просто функцию дописать. Мне казалось, проще как-то поймать закрытие вкладки. Неужели это событие такое неуловимое?
Событие, которое Вам нужно - change. Оно сработает тогда, когда пользователь напишет что-то и перейдет на другую вкладку или закроет эту.
Но я так понимаю, что для window onchange не работает, а срабатывание при каждом нажатии клавиши в окне ввода (которого окна может даже не быть на экране или их могут быть несколько) - это эквивалент нажатию кнопки после ввода всего предложения = нужен аякс. (Если бы window.onchange срабатывало в Яндекс хроме, например - функция запускалась бы каждый раз, когда студент открывает другую вкладку, чтобы найти слово в словаре.) Можно сформулировать проблему по другому - как перед уходом со страницы записать в текстовый файл некое подготовленное значение?
ну программирование это и есть сочетание некоторых действий, которые в итоге превращаются в алгоритм. при обновлении данных пользователем - следи за этими обновлениями где-то на фоне. а при уходе со страницы - быстренько сбрось разведданные аяксом себе на сервер. делов-то...
При уходе со страницы можно и не скрытничать - просто перейти на php, зафиксировать данные и пожелать студенту удачи. Только уход со страницы я качественно поймать не могу - не срабатывает onunload, а onbeforeunload срабатывает только при переходе. (Яндекс браузер) Хорошо, я понимаю так: - отследить закрытие страницы (вкладки) или переход на другой адрес нет сейчас никакой возможности. onunload и onbeforeunload в 2017 году бесполезны. - для записи данных в процессе, без обновления страницы, кроме аякса других методов нет. Спасибо за информацию по кр мере не буду тратить время на бесплодные поиски того, чего нет.
Даже не знаю что тебе сказать. У меня в софте корпоративного назначения если кто-то куда-то пошел - клиент успевает аякснуть нужные мне данные. А у тебя конечно же может быть альтернативная реальность в которой наши советы бесполезны.
Я, честно скажу, ничего не понимаю. О чем вы мне советуете - мож, я чего-то в жизни важное пропускаю? Аякс, как я уже указывала, мне пока неподвластен. КАК отловить уход со страницы? Не важно, чем и как записывать в базу или в текстовый файл. Юзер замучался и закрыл вкладку - как это событие поймать? Где найти валидную инфу за 2017 год, работают или не работают onunload и onbeforeunload?
на can i use можно найти инфу по поддержке браузерами тех или иных фич. относительно закрытия вкладки - тут уже расширение придется писать скорее всего.