window.location.replace(href)后面的后退按钮失败;

时间:2012-08-07 10:56:28

标签: javascript jquery firefox google-chrome opera

我制作了一个简单的函数,它使所有容器的行为像链接(“a”元素)。

function allHot(element){
$(element)
.click(
    function(){
    var href = $(this).find('a').attr('href');
    window.location.replace(href);
})

.hover(
    function(){
    $(this).css({'text-shadow' : '0px 1px 0px #D6D6D6'});
    },
    function(){
    $(this).css({'text-shadow' : 'none'});
    }

);
}

功能很棒。用户可以点击容器上的任何地方而不是单击“更多”按钮,而是正确地重定向。

但是,如果用户在重定向后点击后退按钮,则浏览器会返回两步而不是一步。更奇怪的是,历史看起来还不错。

更好描述的简单方案:

  

Page1 - >第2页

     

Page2 [用户点击“allHot”容器] - > allHot重定向到Page3

     

Page3 [用户点击浏览器后退按钮] - >第1页

这是我正在处理的网站的主要错误。我真的没有预防它的线索。在Firefox,Chrome和Opera上测试了Bug。

也在Opera“没有javascript模式”上测试过。如果javascript被禁用,则不会发生问题。

提前感谢任何线索或解决方案。

2 个答案:

答案 0 :(得分:33)

不使用replace,而是使用以下内容:

window.location.href = ''

答案 1 :(得分:3)

添加到MarcoK的答案。

使用replace时,您正在替换历史状态,因此您不会再将状态推送到历史记录中。

如果您有以下内容:

Page1State1

Page2State2

然后您使用替换,您将Page3替换为State2

当您按后退按钮时,您将从State2转到State1,这就是您前往Page1的原因。

使用window.location.href时,您要再添加一个状态,以便Page3设置为State3,当您点击后退按钮时,您将转到State2 {1}}作为网址。