Если вы хотите обнаружить обновление в HTTP GET, а не только в POST, вот хакерский обходной путь, который в современных браузерах в основном работает.
Javascript:
window.onload = function () {
// regex for finding "loaded" query string parameter
var qsRegex = /^(\?|.+&)loaded=\d/ig;
if (!qsRegex.test(location.search)) {
var loc = window.location.href + (window.location.search.length ? '&' : '?') + 'loaded=1';
window.history.replaceState(null, document.title, loc);
}
};
C#:
public bool IsPageRefresh
{
get
{
return !string.IsNullOrEmpty(Request.QueryString["loaded"]);
}
}
Когда страница загружается, она добавляет параметр QueryString loaded=1
без перезагрузки страницы (опять же, это --window.history.replaceState
--работает только в постархаичные браузеры). Затем, когда пользователь обновляет страницу, сервер может проверить наличие параметра loaded
в строке запроса.
Предостережение: в основном работает
Это не работает, когда пользователь щелкает адресную строку и нажимает enter. То есть сервер выдаст ложноположительный результат, обнаружив обновление, когда, скорее всего, пользователь действительно намеревался перезагрузить страницу заново.
В зависимости от ваших целей, возможно, это желательно, но как пользователь я бы сошел с ума, если бы ожидал, что он сбросит страницу.
Я не слишком много думал об этом, но может быть возможно написать какую-то магию, чтобы отличить обновление от сброса через адресную строку, используя любой/все:
SessionState
(при условии, что SessionState
включен) и значение параметра loaded
QueryString
- прослушиватель событий
window.onbeforeunload
- события клавиатуры (обнаружение F5 и Ctrl + R для быстрого изменения URL-адреса обратно на удаление параметра
loaded
QueryString — хотя это может привести к ложноотрицательному результату при нажатии кнопки обновления браузера кнопка)
- печенье
Если кто-то предложит решение, буду рад услышать.
person
dx_over_dt
schedule
07.09.2015