IE6 / 7后退/前进按钮不会更改window.location.hash

时间:2011-05-06 13:08:01

标签: javascript ajax jsf-2

我有一个使用哈希导航的ajax webapp(JSF 2.0)。

我在this answersetInterval()的帮助下使用了事件触发来检查旧浏览器中的值更改(主要是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。当我按后退/前进按钮时,我可以看到网址栏已使用正确的哈希值更新,但windows.location.hash似乎没有更改,因此我的SetEvent()函数未检测到更改

有人找到了解决方法吗? 谢谢!

1 个答案:

答案 0 :(得分:2)

考虑使用jQuery Hashchange plugin来避免IE6 / 7兼容性问题。你可以找到code example here。对于您的情况,可以按如下方式进行更改。

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

        $(window).hashchange();
    });
</script>