history.back()不会更新Chrome / FireFox中的location.hash

时间:2011-11-30 00:12:14

标签: javascript firefox google-chrome

我尝试构建一个可以更改页面位置的JS脚本,然后返回到找到特定的哈希位置:

var StopAtThisHash ='#';
var CurrentHash = window.location.hash;
var continueLoop = true;
while ((window.history.length>0) && (continueLoop))
{
        window.history.back();
        var NowWeAreAtHash = window.location.hash; //this never changes in Chrome
        //actually, always seems to:  CurrentHash  == NowWeAreAtHash;
       if(NowWeAreAtHash == StopAtThisHash)
                        continueLoop= false;
}

奇怪的是,在Chrome和FF中,window.location.hash在back()之后没有改变。历史长度也没有像我预期的那样减少1。循环无限期运行,浏览器挂起。

在IE 9中,这似乎按预期运行。

有关此问题的解决方法吗?

2 个答案:

答案 0 :(得分:1)

function goBackHome () {
    goBackToHash(''); // Assume the home is without hash. You can use '#'.
}
function goBackToHash(hash) {
    setTimeout(function () {
        if (window.location.hash == hash) return;
        history.back();
        goBackToHash(hash);
    }, 0);
}

为了克服while循环的问题,我尝试使用setTimeout,但这通常比预期更进一步......等待一个完美的解决方案。

我认为history.back()window.location.hash更改时间之间存在延迟。

另一种解决方法是在JS中保留哈希值,以便您可以确定history.go(N)中需要多少步骤。

答案 1 :(得分:0)

似乎window.history.back()window.history.forward()window.history.go()不会更改历史记录,只需来回导航即可。如果back()会更改历史记录的长度,那么您将无法forward()

作为解决方法,我建议使用window.historyfor从最后一个循环到第一个而不是while