我尝试构建一个可以更改页面位置的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中,这似乎按预期运行。
有关此问题的解决方法吗?
答案 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.history
将for
从最后一个循环到第一个而不是while
。