19

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

);
}

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

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

简单的方案更好地描述:

第1页->第2页

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

Page3 [用户点击浏览器返回按钮] -> Page1

这是我现在正在开发的网站的主要错误。我真的没有办法阻止它。在 Firefox、Chrome 和 Opera 上测试的错误。

也在 Opera“无 javascript 模式”上进行了测试。如果 javascript 被禁用,则不会发生问题。

在此先感谢您提供任何线索或解决方案。

4

2 回答 2

44

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

window.location.href = ''
于 2012-08-07T10:58:43.463 回答
10

添加到MarcoK的答案。

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

如果您有以下情况:

Page1State1

Page2State2

然后你使用 replace 你将替换Page3State2.

当您按下后退按钮时,您将从State2to转到State1,这就是您要去的原因Page1

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

于 2015-11-05T23:33:22.147 回答