Как известно, в веб-приложениях XHR (aka AJAX) история для вашего приложения не создается, и нажатие кнопки обновления часто перемещает пользователя из его текущей активности. Я наткнулся на location.hash(например, http://anywhere/index.html#somehashvalue
), чтобы обойти проблему обновления (используйте location.hash, чтобы сообщить вашему приложению о текущем состоянии и использовать обработчик нагрузки страницы до состояния reset). Это действительно хорошо и просто.
Это заставило меня задуматься об использовании location.hash для отслеживания истории моего приложения. Я не хочу использовать существующие библиотеки, потому что они используют iframe и т.д. Итак, вот мой никель и копейка: при загрузке страницы приложения я запускаю это:
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-приложениях? Каковы плюсы и минусы?
Обновление: поскольку я использую свою структуру homebrew, я не хотел использовать одну из существующих фреймворков. Чтобы иметь возможность использовать location.hash в IE и иметь в нем также историю, я создал простой script (да, ему нужен iframe), который может вам пригодиться. Я опубликовал его на моем сайте, не стесняйтесь использовать/модифицировать/критиковать его.