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つの手順に戻ります。さらに奇妙なことに、歴史は大丈夫に見えます。

より良い説明への簡単なスキーム:

ページ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 を使用すると、 に置き換えPage3られState2ます。

戻るボタンを押すと からState2に移動するのでState1、に移動しますPage1

使用window.location.hrefすると、もう 1 つの状態が追加Page3されるため、に設定されState3ます。[戻る] ボタンをクリックすると、 State2URLPage2として含まれる場所に移動します。

于 2015-11-05T23:33:22.147 に答える