У меня есть веб-приложение ajax (JSF 2.0), которое использует хеш для навигации.
Я использовал оба события с помощью этого ответа и setInterval()
для проверки изменения значения в старых браузерах (в основном IE6 + 7).
Код Javascript, который делает это:
window.onload = window.onhashchange = function() {
lastHash = window.location.hash; // To save a refresh on browsers that don't need it.
var fragment = document.getElementById('fragment');
fragment.value = window.location.hash;
fragment.onchange();
}
// Old Browsers That don't support onhashchange...
var lastHash = window.location.hash;
function checkFragment() {
if (window.location.hash != lastHash) {
lastHash = window.location.hash;
var fragment = document.getElementById('fragment');
fragment.value = window.location.hash;
fragment.onchange();
}
}
Это хорошо работает. Это означает, что когда я изменяю значение хеша, приложение AJAX получает уведомления и обновления.
Одним из примеров, в котором это не работает, является IE 6/7. Когда я нажимаю кнопки «Назад» и «Вперед», я вижу, что строка URL обновляется с правильными значениями хеша, но windows.location.hash
, похоже, не меняется, и поэтому моя функция SetEvent()
не обнаруживает изменения.
Кто-нибудь нашел решение этой проблемы?
Спасибо!