2012-08-07 105 views
8

我做了一個簡單的函數,它使所有容器的行爲都像鏈接(「a」元素)。後退按鈕在window.location.replace(href)後失敗;

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頁

第二頁[關於 「allHot」 用戶點擊容器] - > allHot重定向到第3頁

第3頁[關於瀏覽器用戶點擊後退按鈕] - > Page1

這是我正在處理的網站的主要錯誤。我真的沒有線索來阻止它。在Firefox,Chrome和Opera上測試錯誤。

還測試Opera「沒有JavaScript模式」。如果javascript被禁用,則不會發生問題。

預先感謝任何線索或解決方案。

回答

28

而不是使用replace的,使用以下命令:

window.location.href = '' 
+4

這麼簡單,就像一個魅力。非常感謝。 – sznowicki 2012-08-07 11:01:39

+1

注意:如果您像我一樣,發現上述重定向後的後退按鈕仍然無效,請確保您使用的是完整網址,例如通過'http:// www.example.com/endpoint'。僅使用'/ endpoint'仍然失敗。 – zafrani 2016-09-18 19:56:35

1

添加到MarcoK的答案。

當使用replace要更換的歷史狀態,這樣你就不會推有一個國家的歷史。

如果您具備以下條件:

Page1State1

Page2State2

然後使用代替你將取代Page3State2

當你按下後退按鈕,你將從State2State1,這就是爲什麼你要Page1

當使用window.location.href您添加這樣Page3將被設置爲State3有一個國家,當你點擊後退按鈕,你會去State2至極具有Page2的URL。