Я ищу способ определить, когда страница перезагружается после нажатия кнопки «Назад», чтобы я мог выборочно игнорировать ошибки. Позвольте мне объяснить, почему:
Представьте себе страницу, которая отображает некоторые данные, идентифицируемые по идентификатору:
/show/some/data?id=5
Первоначально идентификатор существует, и страница отображается. Если идентификатор не существует, отображается сообщение об ошибке и регистрируется ошибка, потому что это не должно происходить и будет указывать на неработающую ссылку в приложении.
Теперь представьте, что пользователь просматривает данные, решает удалить их и после удаления использует кнопку «Назад», чтобы снова перейти на ту же страницу (кстати, это не гипотетически, я видел это в своем приложении). Теперь идентификатор больше не действителен, вызывая ошибку. Если бы я мог различить начальную загрузку страницы и вторую загрузку страницы после использования кнопки «Назад», я мог бы быть более снисходительным в своей обработке ошибок. Я считаю, что неработающая (прямая) ссылка в приложении является фатальной ошибкой. Неработающая ссылка после щелчка назад (когда ее не было изначально), скорее всего, вызвана действиями, предпринятыми пользователем за это время. В этом случае я бы скорее перенаправил пользователя на страницу обзора, чем показал бы ошибку приложения.
Я полагаю, что один из способов решить эту проблему — прикрепить случайно сгенерированный идентификатор к URL:
/show/some/data?id=5&rnd=<?php print rand(); ?>
и зарегистрируйте случайные идентификаторы, которые использовались в сеансе. Если идентификатор повторяется, я могу предположить, что страница была перезагружена, и выборочно игнорировать некоторые ошибки.
Однако это потребует изменения многих ссылок в приложении. Я также мог бы использовать javascript / jQuery для изменения всех ссылок на странице с одинаковым эффектом:
$("a").attr('href', function (i, h) {
return h + (h.indexOf('?') != -1 ? "&" : "?") + "rnd=" + Math.random ();
});
Это немного менее агрессивно, но все же довольно тяжело для решения такой, казалось бы, тривиальной проблемы. Интересно, есть или может быть автономный способ сделать это? Есть ли какой-нибудь способ для бэкэнд-приложения отличить, если страница загружается путем прямого нажатия на ссылку или перезагружается после щелчка назад? Или есть более элегантное решение с помощью JavaScript?
Для этого нет идеального решения, так как вы пытаетесь (вроде) изменить поведение браузера. Самая простая идея, которую я могу придумать, — установить переменную сеанса со списком удаленных страниц и вставить идентификаторы страниц в нее на странице удаления.
Затем необходимо обновить обработчик ошибок, чтобы дополнительно проверить наличие запрошенного идентификатора страницы в списке удаленных страниц. Таким образом, вам вообще не придется связываться с URL.
Вот пример потока:
Вы также можете сделать еще один шаг и отследить все посещенные страницы, чтобы вы знали, что, если что-то было несколько минут назад, а теперь это не так, пользователь, должно быть, удалил это. Это позволит вам обрабатывать больше таких событий, если это необходимо.
Других решений пока нет …