Как хорошо известно, в веб-приложениях XHR (также известных как AJAX) история для вашего приложения не создается, и нажатие кнопки обновления часто выводит пользователя из его / ее текущей активности. Я наткнулся на location.hash (например, http://anywhere/index.html#somehashvalue
), чтобы обойти проблему с обновлением (используйте location.hash, чтобы сообщить вашему приложению о его текущем состоянии, и используйте обработчик загрузки страницы для сброса этого состояния). Это действительно красиво и просто.
Это заставило меня задуматься об использовании location.hash для отслеживания истории моего приложения. Я не хочу использовать существующие библиотеки, потому что они используют фреймы и т. Д. Итак, вот мой никель и десять центов: когда загружается страница приложения, я запускаю это:
setInterval(
function(){
if (location.hash !== appCache.currentHash) {
appCache.currentHash = location.hash;
appCache.history.push(location.hash);
/* ... [load state using the hash value] ... */
return true;
}
return false;
}, 250
);
(appCache - это предопределенный объект, содержащий переменные приложения) Идея состоит в том, чтобы запускать каждое действие в приложении по хеш-значению. В приличных браузерах изменение значения хеш-функции добавляет запись в историю, в IE (‹= 7) - нет. Во всех браузерах переход назад или вперед к странице с другим значением хеш-функции не вызывает обновления страницы. Вот где берет начало интервальная функция. С помощью функции каждый раз, когда обнаруживается изменение значения хеш-функции (программно или путем щелчка назад или вперед), приложение может предпринять соответствующие действия. Приложение может отслеживать свою собственную историю, и я должен иметь возможность отображать кнопки истории в приложении (особенно для пользователей IE).
Насколько я могу судить, это работает в кросс-браузере и не требует затрат памяти или ресурсов процессора. Итак, мой вопрос: будет ли это жизнеспособным решением для управления историей в XHR-приложениях? Каковы плюсы и минусы?
Обновление: поскольку я использую свой доморощенный фреймворк, я не хотел использовать ни один из существующих фреймворков. Чтобы иметь возможность использовать location.hash в IE и иметь его в своей истории, я создал простой скрипт (да, ему нужен iframe), который может быть вам полезен. Я опубликовал его на моем сайте, не стесняйтесь использовать / изменять / критиковать его.