2008-09-10 1 views
12

現在の勤務先のSMEは特定のページの戻るボタンを無効にしようとします。私たちは、ユーザーがいくつかの選択を行い、処理するためにそれらを提出するページを持っています。場合によっては、別のページにコメントを入力する必要があります。戻るボタンの使用を防止する(IEで)

ユーザーが把握したことは、情報を送信してコメントのあるページに移動し、戻るボタンを押して前のページに戻るとコメントを入力する必要がないことです。

私はこれにいくつかの異なる解決策があることを知っています(そしてそれらの多くは、はるかにエレガントで、その後、戻るボタンを無効にします)が、これは私が残したものです。戻るボタンの動作を変更して、誰かが前のページに戻るのを防ぐことは可能ですか? (submit - > falseのようなものを返します)。

ダブルポスト情報のため、前のページに戻って現在のページに移動することはできません。私はそれを現在のページから遠ざけることしかできない。私はそれを見つけましたが、私は記事が常に前のページに戻ると言っていました。私は誰かがこれを可能にするいくつかの狂気のkoo foo jsスキルを持っていることを望んでいました。

誰もがこれは悪い考えであると言いますが、私は同意しますが、時にはあなたが話したことをしなければならないことを理解しています。

+2

+1を時々DTWTしたため。 – Simon

+0

4GuysFromRollaは、「戻るボタンを無効にする」という徹底的な調査を行った。 その記事を読むことをお勧めします。また、(すべてのシナリオで)それがうまくいかない理由も教えてください。 – Espo

答えて

1

バックボタンを無効にすることは、「強引な」アプローチのようです。

コマンドボタンを持たないモーダルダイアログにジャンプし、ユーザーがワークフローを歩み、プロセスが完了したらダイアログを閉じることもできます。

+0

私はあなたに完全に同意するだろうが、私はこれが私が抱えていることであると言われている。 – kemiller2002

+0

あなたはそれに執着しているわけではありません。それは実行可能で有効な、または倫理的な解決策ではありません。コードを修正してください – lordscarlet

2

コメントを前のページに移動し、そこに必要なフィールドを作成できますか?

戻るボタンを無効にするは機能しません。

3

あなたはサーバー側のソースコードにアクセスできますか?そうであれば、情報が既に提出されている場合は、第2ページにリダイレクトされる最初のページにチェックを入れることができます(これにはセッションを使用する必要があります)。以前の職場では、これがマルチステップアプリケーション(受諾のためのアプリケーションのようなアプリケーション)をどのように処理したかです。

0

これを行う信頼できる方法はありません。ユーザーがこれをやめることを100%保証することはできません。

これを念頭に置いて、時間の「ほとんど」を無効にするためには、非常にエキゾチックなソリューションに行く価値がありますか?それはあなたが決定するためのものです。

幸運。

2

ブラウザでjavascriptをセキュリティで隔離しているため、戻るボタンの内容を変更することはできません。

コメントが必要であることを示すユーザーのセッションに何かを保存し、ユーザーがコメントページにリダイレクトしようとするアプリ内のページを持っている可能性がありますか?

ユーザーがコメントページにアクセスしたときにブラウザを閉じるとどうなりますか?

私はあなたがここで選択肢を与えられていないことを知っていますが、彼らが求めているものは不可能であると思われるので...

おそらく、ユーザーがコメントを入力するまで、項目を完了したと見なすことはできません。したがって、進行中のアイテムと完成したアイテムの両方を追跡し、その区別をUIで行う必要がありますが、これは最も堅牢な方法かもしれません。

フォームページにコメントフィールドを入力するだけですか?私は前にこれを見てきました

4

window.onBack = history.forward(); 

全然可能ならば、私は戻るボタンを無効にしないでしようと、ほとんど間違いなく汚いハックです。そして、ユーザーはおそらくそれをかなり簡単に回避することができます。また、キャッシュに応じて、サーバーコードが処理されるか、またはJavaScriptを使用してキャッシュされたページが最初に実行されるかはわかりません。

だから、ええ、ご自身の責任で使用:)

+0

あなたのコードはこの「要件」を破るでしょうか? "ダブル・ポスティング情報のため、前のページに戻って現在のページに移動することはできません。現在のページから直接移動することはできません" – Espo

+0

私はそれをしたWebアプリケーションを使用しました以前はこれまでに一番イライラしたことの一つでした。 –

+0

合意した、私はこれを行うサイトが嫌い - 私はそれがWebを壊すと思う。私はこの特定のテクニックを使用したプロジェクトの要件にも関与していませんでした:) –

5

いや、あなたは運命です。別のブラウザでページをポップアップして戻るボタンを隠しても、常にBackspaceキーがあります。

マーケティング担当者やアナリストのタイプの問題は、ステートレスなウェブの基本的な概念を理解できないということです。彼らは、ページが完全に、それを使用しているブラウザに全く気づいていないことを理解しておらず、ブラウザの絶対的な制御はまったくWebページの能力の範囲外です。

ユーザーが戻るボタンを押すのを防ぐ最もよい方法は、すべてが戻るときにそのデータが失われていることを確認することです。たとえば、コメントページはデータを保存できる唯一のポイントです。彼らが戻るボタンを押しても、すべてを(pragma:nocacheの行に沿って考える)をやり直す必要があります。

ユーザーは不平を言いますが、確かにこのような厄介な要件が存在する理由はありますか?

+1

通常、実際のユーザーは、そのようなばかげたくそを求めません。 – SamB

41

これを行わないでください。これはインターフェイスのデザインが悪く、ユーザーのブラウザが予期しない動作をするように強制します。

バックボタンを正常に停止したスクリプトはハックであるとみなし、IEチームがセキュリティ修正をリリースすると期待します。

戻るボタンは、ウェブサイトではなく、プログラムインターフェイスの一部です。

特定のケースでは、ユーザーがフォームを完了していない場合に警告するページにアンロードイベントを追加することをお勧めします。戻るボタンは影響を受けず、ユーザーは自分の行動を警告されます。ユーザーが考え出した何

+1

Keithが入ります。私が網羅的に検索した結果、すべてのケースで本当に戻るボタンを無効にする方法はまだないことがわかりました」ドー!私は最後に2つの記事を読む必要はありません! –

+1

はキースと合意した。私は私の仕事でほぼ同じ状況を経験してきましたが、長い時間が経過した後、ボタンを無効にする必要がないようにアプリケーションをリファクタリングする方が簡単だったはずです。 – Jared

+1

「戻る」ボタンを押してウェブサイトが「ページはもはや有効ではありません」というエラーを表示すると、予期せぬものとして表示されません。あなたは歴史を書き直そうとすると罪悪感を感じます。 – stuartdotnet

2

は、彼らが情報 を提出する場合 コメントを入力してコメント でページに移動し、その後に を返すために、バックボタンを押す必要はありません です前のページ。

それから、彼らはコメント欄に「ノーコメント」を入力していないのに十分な、おそらくもスマートです。

人々にコメントを追加さ​​せようとすることはできますが、使用できない悪質なソフトウェアや迷惑なユーザーに終わってしまい、コメントを得られないことがあります。これは通常、一歩前に戻って、ユーザーの視点からやっていることを再考する良い機会です。

+1

これはまた、いくつかの悪いコードを叫ぶだけです。戻るボタンをクリックしてコメントを無視できるのはなぜですか?あなたは、ユーザーのブラウザをハッキングすることによって悪いコードを解決することはありません。 IE9の – lordscarlet

1

バグを隠すためにユーザーインターフェイスを壊す代わりに、アプリケーションをダブル送信から保護する必要があります。

0

簡単な解決策として、これを試してください。更新パネルとボタンをそこに挿入し、javascriptを使用して非表示にして、ページの読み込みに押します。はい、私はそれがあなたのページを読み返してポストさせることを理解し、JavaScriptが無効になっている場合は動作しないかもしれませんが、確かにあなたはバックボタンの問題に半分まともな応答を達成するのに役立ちます。 Andy

4

JavaScriptを使用して戻るボタンを無効にするちょっとしたハックが出てきました。 chrome 10、firefox 3.6、IE9で確認しました。

<!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"; 
} 
// If you want to skip the auto-positioning at the top of browser window,you can add the below code: 
window.location.hash=' '; 
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 the back button! 
</body> 
</html> 
+0

はページを一番上にスクロールさせ、ページをスクロールさせません – chrism

0

あなたはそれらが前のページに戻るのを防ぐことができます。 location.replace()は新しいページで現在のページの履歴エントリを置き換え、そう...

page1.html:ユーザーがlocation.replace('page3.html');

を呼び出すリンクをクリック:ユーザーが

page2.htmlをpage2.htmlに行くのリンクをクリックします

page3.html:ユーザーがボタンを背面クリックすると

をpage1.htmlに行く(これはPOSTを行うとうまく合わないかもしれませんが、あなたはAJAXを介してウェブサービスにデータを投稿することができ、その後、location.replaceを呼び出します)

0

新しいWebアプリケーションを最初から起動している場合や、アプリを再処理する時間が十分ある場合は、JavaScriptとAJAXを使用して、ブラウザの履歴、戻る、および転送機能を回避できます。

  • ログインする前またはログインした直後に新しいウィンドウでアプリケーションを開きます。
  • 希望する場合は、ウィンドウオプションを使用して、ナビゲーションバーを非表示にします(前後のボタンを使用)。
  • すべてのサーバー要求にAJAXを使用します。ウィンドウの場所URLを変更することはありません。
  • シンプルなWeb APIを使用してデータを取得し、アクションを実行し、JavaScriptを使用してアプリケーションをレンダリングします。
  • ウィンドウの履歴には1つのURLしかありません。
  • 戻ると進むボタンは何もしません。
  • ログアウト時にウィンドウを自動的に閉じることができます。
  • セキュリティに関する情報がブラウザの履歴に漏洩することはありません。

この手法は、質問に答えるが、それはまた、いくつかの方法でのベストプラクティスに反する:戻る]ボタンや[進む]ボタンを

  • を期待どおりに動作する必要があります。
  • 新しいブラウザウィンドウを開いてはいけません。
  • アプリはJavaScriptなしでも機能するはずです。

この手法を使用する前に、要件とユーザーを慎重に検討してください。

0

私は、このソリューションが表示されない:同情で

function removeBack(){ 
 
\t window.location.hash="nbb"; 
 
\t window.location.hash=""; 
 
\t window.onhashchange=function(){window.location.hash="";} 
 
}

+0

これはおそらく2008年のInternet Explorerでは動作しませんでした。 –

関連する問題