2008-09-17 12 views
31

私は、ユーザーがヒットした場合、同じ情報を再送信し、データのフローと整合性を失うかもしれないアプリケーションを作成しています。 JavaScriptを使用しているユーザーと使用していないユーザーの両方で無効にするにはどうすればよいですか?ブラウザの戻るボタンを無効にする

+40

をコードするこれらの5行を入れて、戻るボタンはまだMINEです。私のものを混乱させないでください... ;-) – Shog9

+5

これは間違った質問です。情報を再送信すると、アプリケーションがそれを認識して適切に動作するように、アプリケーションを設計する必要があります。 – reinierpost

答えて

76

悲しいことに、それは不可能です。ただし、アプリケーションのナビゲーションモデルを検討してください。 Post/Redirect/Get PRG Modelを使用していますか? http://en.wikipedia.org/wiki/Post/Redirect/Get

このモデルは、ポストバックモデルよりもバックボタンの方がフレンドリーです。

+50

それについて悲しいことはありません。 –

+19

有効なポイント。私はただ悲しいです。 ;) –

+0

Scott - ツールバーを無効にして、IE固有のメニューを右クリックする機能はありますか?私は完全にナビゲーションをロックするLOBアプリを見たことがあるが、(また悲しいことに)彼らはまた、ユーザーがIEを必要とする。 –

12

すべきではありません。

ページのonbeforeunloadイベントに何らかのスクリプトを添付して、ユーザーが何をしたいのかを確認することができます。もう少し行くとdisable itを試してください。ただし、JavaScriptがオンになっているユーザーにのみ有効です。代わりに、アプリケーションの書き換えを見て、各ページの送信時にトランザクションをコミットしないようにします。ただし、プロセスの最後に限ります。

+0

Hmmm ... onbeforeunloadイベントは、ユーザーが別のページに移動しているだけでなく(ユーザーが戻るボタンを押したため)、スクリプトが呼び出されるため、ページから移動するときにも呼び出されます。 –

0

各フォームのデータを_NEWウィンドウに投稿できます。これにより、各ウィンドウの戻るボタンが無効になりますが、javascriptを使用しないと、古いウィンドウを強制的に閉じてしまうことはありません。ここで

3

がそれに前のポストです:私は強くバックボタンを壊す防ぐために英雄的な長さに行くためにあなたを促す Prevent Use of the Back Button (in IE)

+0

よく、推薦エンジンは投稿を作成したときにそれを表示しませんでした:( – Haoest

8

、それはあなたのユーザーを遠ざけるために確実な方法であるとさえ番にそれを作りました1 on Jacob Neilsen's Top 10 Web Design Mistakes in 1999

「おそらく、<ここにあなたのシナリオを挿入するために戻るボタンを壊さないようにするには、どうすればいいですか?」という質問をすることが考えられます。>?

Scottの答えがマークに近い場合は、PRGモデルへのフローを変更することを検討してください。それが他のものであれば、もう少し詳しく説明し、私たちがどのように役立つかを見てください。

Response.Cache.SetCacheability(HttpCacheability.NoCache); 
    Response.Cache.SetExpires(Now.AddSeconds(-1)); 
    Response.Cache.SetNoStore(); 
    Response.AppendHeader("Pragma", "no-cache"); 

すぐにあなたがいることがわかります:

+2

彼はバックボタンを "壊す"とは言っていませんでした。 「戻る」とは、「あなたのAjaxアプリケーションでやったことを元に戻す」という意味で、代わりに「1つの任意かつ曖昧なHTTPリクエストに戻る」という意味です。 – pcorcoran

+1

私にはちょうど "彼は戻ってボタンを壊すことを望んでいない、彼はちょうどそれが壊れないようにするために戻るボタンを壊したいと思った"と読んでいる。 :S AJAX/JavaScriptとバックボタンを使って楽しいプレイをすることができます。 –

5

最良のオプションは、あなたが

あなたはこのようなものを使用することができます(今のところ)それで立ち往生しているがあれば、流れを制御するポストバックに依存しません例のみPUのために - 、コードがチェックされていないに延びているいくつかの問題を解決します

if (Page.IsPostBack) 
{ 
     if (pageIsExpired()){ 
      Response.Redirect("/Some_error_page.htm"); 
     } 
     else { 
      var now = Now; 
      Session("TimeStamp") = now.ToString(); 
      ViewState("TimeStamp") = now.ToString(); 
     } 

    private boolean pageIsExpired() 
    { 
    if (Session("TimeStamp") == null || ViewState("TimeStamp") == null) 
     return false; 

    if (Session("TimeStamp") == ViewState("TimeStamp")) 
     return true; 

     return false; 
    } 

:それはすべてのブラウザでは動作しませんが、その後、次のようなあなたのコードにチェックを導入することができますrposes ..ロラから

3

はバックボタンが停止しない場合があります無効にします将来のブラウザの戻るボタン。

開発サイクルの後半では、上記のいくつかの提案を試してみることをお勧めしますが、バックボタンがサイトのロジックを妨げないようにフローを構成する必要があるときは、彼らが期待するような前のページ。

7

JavaScriptを使用して戻るボタンを無効にするちょっとしたハックが出てきました。私は、Firefox 3.6とIE9、クロム10上でそれを確認:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" > 
<title>Untitled Page</title> 
<script type = "text/javascript" > 
function changeHashOnLoad() { 
    window.location.href += "#"; 
    setTimeout("changeHashAgain()", "50"); 
} 

function changeHashAgain() { 
    window.location.href += "1"; 
} 

var storedHash = window.location.hash; 
window.setInterval(function() { 
    if (window.location.hash != storedHash) { 
     window.location.hash = storedHash; 
    } 
}, 50); 


</script> 
</head> 
<body onload="changeHashOnLoad(); "> 
Try to hit back! 
</body> 
</html> 
+1

それはちょうど厄介です... – Soumya

+3

しかし、それは動作します - それをテストしてください。 –

+1

私はそれを疑うことはありません。実際に*戻ることを望んでいるかもしれないユーザーのためのちょっとした経験です。 – Soumya

0

私は使用することによってこれを達成することができた:

Response.Cache.SetExpires(DateTime.MinValue); 
Response.Cache.SetNoStore(); 

私はResponse.Cache.SetCacheability(HttpCacheability.NoCache)を使用する場合、私はオフィスファイルをダウンロードできませんでした。

1

データが重複していないことを確認するには、適切な検証を追加する必要があります。しかし、私の場合のように、フォームの後にサードパーティのAPIを使用しているので、データを完全に制御することはできません。だから私はこの

history.go(+1); 

これは、彼らが戻って(ちょうど例の支払いを与える)「支払い」ページへ行くしようとした場合、「支払い」ページの後に来ることになっている「領収書」を楽しみにユーザーを送信するのに使用しました。

4

すべての主要なブラウザで戻るボタンを無効にすることが可能です。これは、バックボタンを完全に無効にするためにハッシュ値を使用するだけです。私はあなたのサイトを使用している場合は はちょうどあなたのページに

<script> 
window.location.hash="no-back-button"; 
window.location.hash="Again-no-back-button";//for google chrome 
window.onhashchange=function(){window.location.hash="no-back-button";} 
</script> 

Detailed description

+0

トリッキーな1つですが、作品... –

+0

@Ankit:Brilliant!私の命を救いました!ありがとう!!! – Emma

+0

は、すべての場合、つまりクロム、サファリで正しく機能しません。 –

関連する問題