History.back()不更新位置.在Chrome/FireFox中

history.back() does not update location.hash in Chrome/FireFox

本文关键字:Chrome FireFox 位置 更新 back History      更新时间:2023-09-26

我试图构建一个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。循环无限运行,浏览器挂起。

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

有什么解决方法吗?

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)中需要多少步骤。

似乎window.history.back(), window.history.forward()window.history.go()不改变历史,只是来回导航。如果back()会改变历史记录的长度,那么你就不能修改forward()

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