IE6 / 7 Кнопка Назад / Вперед не меняет window.location.hash - PullRequest
1 голос
/ 06 мая 2011

У меня есть веб-приложение 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() не обнаруживает изменения.

Кто-нибудь нашел решение этой проблемы? Спасибо!

1 Ответ

2 голосов
/ 06 мая 2011

Попробуйте использовать jQuery Hashchange плагин , чтобы избежать проблем с совместимостью с IE6 / 7.Вы можете найти пример кода здесь .Для вашего случая его можно изменить следующим образом.

<script src="jquery.js"></script>
<script src="jquery-hashchange.js"></script>
<script>
    $(function(){
        $(window).hashchange(function(){
            $('#fragment').val(location.hash).change();
        });

        $(window).hashchange();
    });
</script>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...