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

szn*_*cki 12 javascript firefox jquery opera google-chrome

我做了一个简单的函数,使所有容器的行为像链接("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'});
    }

);
}
Run Code Online (Sandbox Code Playgroud)

功能很棒.用户可以单击容器上的任何位置并正确重定向,而不是单击"更多"按钮.

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

简单方案以更好地描述:

第1页 - >第2页

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

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

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

也测试了Opera"没有javascript模式".如果禁用了javascript,则不会发生问题.

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

Mar*_*coK 35

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

window.location.href = ''
Run Code Online (Sandbox Code Playgroud)

  • 如此简单,就像一个魅力.非常感谢. (4认同)
  • 注意:如果您像我一样发现如上所述在重定向后仍然无效后退按钮,请确保您使用完整的URL,例如`http:// www.example.com/endpoint`.仅使用`/ endpoint`仍然失败. (2认同)

Car*_*lla 9

添加到 MarcoK 的答案中。

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

如果您有以下情况:

Page1 到 State1

Page2 到 State2

然后你使用 replace 你将替换Page3为State2。

当您按下后退按钮你会去从State2到State1,这就是为什么你要Page1。

使用时,window.location.href您Page3将再添加一个状态,因此将设置为State3,当您单击后退按钮时,您将转到State2具有Page2URL 的位置。