2012-08-07 9 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'}); 
    } 

); 
} 

機能は素晴らしいです。 「more」ボタンをクリックする代わりに、ユーザーはコンテナのどこでもクリックして、適切にリダイレクトされます。リダイレクトした後、ユーザーがボタンをクリックした場合、バック

しかし、ブラウザが戻って2段階の代わりに、1それが必要として行きます。もっと奇妙なことは、歴史はOKのようだ。

よりよい説明を簡単スキーム:

ページ1 - > Page2を

ページ2 [ "allHot" をユーザがクリックコンテナ] - > allHotがページ3

ページ3 [ブラウザ上でユーザがクリックにリダイレクト戻るボタン] - > Page1

これは私が今取り組んでいるウェブサイトの大きなバグです。私は本当にそれを防ぐための手がかりを持っていません。 Firefox、Chrome、Operaでテストされたバグ。オペラ「いいえジャバスクリプトモード」にも試験

。 JavaScriptが無効の場合、問題は発生しません。任意の手掛かりまたは溶液を事前に

感謝。

答えて

28

代わりのreplaceを使用して、以下を使用します。

window.location.href = '' 
+4

シンプルなので、魅力的です。本当に感謝。 – sznowicki

+1

注:あなたが私のような人で、上記のようにリダイレクトしても[戻る]ボタンがまだ機能しない場合は、完全なURLを使用していることを確認してください。 'http:// www.example.com/endpoint'。 '/ endpoint'だけではまだ失敗していました。 – zafrani

1

はMarcoKの答えに追加します。

あなたが歴史にもう一つの状態をプッシュしていないので、あなたは歴史の状態を交換する replaceを使用。

次持ちの場合:

Page1State2

Page2State1にして、あなたがState2Page3を交換する交換してください使用しています。

戻るボタンを押すと、State2からState1に変わり、Page1になります。

あなたがそうPage3State3に設定されますもう一つの状態を追加していて、[戻る]ボタンをクリックしたときに、あなたがState2ウィッヒに行きますwindow.location.hrefを使用してURLとしてPage2ています。

関連する問題