12

そのため、私の現在の職場の中小企業は、特定のページの戻るボタンを無効にしようとしています。ユーザーがいくつかの選択を行い、処理のために送信するページがあります。場合によっては、別のページにコメントを入力する必要があります。

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

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

情報が二重に投稿されているため、前のページに戻ってから現在のページに移動することができません。現在のページから直接離れないようにすることしかできません。ググったのですが、必ず前のページに戻るという投稿しか見当たりませんでした。私は、誰かがこれを可能にする狂気の kung foo js スキルを持っていることを望んでいました。

誰もがこれは悪い考えだと言うことは理解していますし、私も同意しますが、時には言われたことをしなければならないこともあります.

4

15 に答える 15

41

これをしないでください。これはインターフェイスの設計が悪く、ユーザーのブラウザが予期しない動作を強いられることになります。

戻るボタンの機能を停止させるスクリプトはすべてハッキングとみなし、IE チームがセキュリティ修正プログラムをリリースすることを期待しています。

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

あなたの特定のケースでは、フォームを完了していない場合にユーザーに警告するページにアンロードイベントを追加するのが最善の策だと思います。戻るボタンは影響を受けず、ユーザーはそのアクションについて警告を受けます。

于 2008-09-10T16:23:11.720 に答える
5

いや、あなたは運命にある。別のブラウザーでページをポップアップして [戻る] ボタンを非表示にした場合でも、常に Backspace キーが表示されます。

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

ユーザーが戻るボタンを押すのを思いとどまらせる最良の方法は、戻るボタンを押したときにページのすべてのデータが失われるようにすることです。たとえば、コメント ページはデータを保存できる唯一の場所であり、戻るボタン すべてを最初からやり直す必要があります(pragma: nocache の行に沿って考えてください)。

ユーザーは確かに不満を言うでしょうが、彼らこそがこの見捨てられた要件が存在する理由ですよね?

于 2008-09-10T16:22:40.460 に答える
4

私は前にこれを見たことがあります:

window.onBack = history.forward();

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

だから、ええ、あなた自身の責任で使用してください:)

于 2008-09-10T16:21:04.440 に答える
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>
于 2011-05-04T09:20:51.517 に答える
3

サーバー側のソース コードにアクセスできますか? その場合、最初のページにチェックを入れて、情報が既に送信されている場合は 2 番目のページにリダイレクトすることができます (明らかに、これにはセッションを使用する必要があります)。以前の職場では、多段階申請(受理申請と同様の申請)をこのように処理していました。

于 2008-09-10T16:18:03.857 に答える
2

コメントを前のページに移動して、そこで必須フィールドにしていただけますか?

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

于 2008-09-10T16:16:21.643 に答える
2

ブラウザでの JavaScript のセキュリティ分離のため、[戻る] ボタンの動作を変更することはできません。

おそらく、コメントが必要であることを示す何かをユーザーのセッションに保存し、ユーザーが読み込もうとするアプリ内のページをコメントページにリダイレクトすることができますか?

ユーザーがコメント ページに移動したときにブラウザを閉じたらどうなるでしょうか。

ここで選択肢が与えられていないことはわかっていますが、彼らが求めていることは不可能に思えるので...

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

それとも、フォーム ページにコメント フィールドを配置するだけですか?

于 2008-09-10T16:19:40.653 に答える
2

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

また、コメント欄に「ノーコメント」と入力するほど頭が良いのかもしれません。

人々にコメントを追加するように強制することはできますが、最終的には使用できない悪質なソフトウェアに行き着き、ユーザーを苛立たせ、それでもコメントを得られないでしょう。これは通常、一歩下がって、ユーザーの視点から何をしているかを再考する良い機会です。

于 2008-09-10T16:42:44.187 に答える
1

戻るボタンを無効にすることは、一種の「ブルートフォース」アプローチのようです。

もう 1 つのオプションは、コマンド ボタンのないモーダル ダイアログに飛び出し、ユーザーにワークフローを案内し、プロセスが完了したらダイアログを閉じることです。

于 2008-09-10T16:14:51.833 に答える
1

バグを隠すためにユーザー インターフェイスを壊すのではなく、二重送信からアプリケーションを保護する必要があります。

于 2008-11-16T15:35:08.763 に答える
0

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

page1.html:ユーザーがpage2.htmlに移動するリンクをクリックします

page2.html:ユーザーが呼び出しているリンクをクリックしますlocation.replace('page3.html');

page3.html:ユーザーが戻るボタンをクリックしてpage1.htmlに移動します

これはPOSTの実行には適さない場合がありますが、AJAXを介してデータをWebサービスに投稿してから、location.replace()を呼び出すことができます。

于 2012-06-29T19:43:05.663 に答える
0

簡単な解決策として:これを試してください。そこに更新パネルとボタンを挿入し、JavaScriptを使用して非表示にし、ページの読み込み時に押します。はい、それによりページがロード時にポストバックされ、JavaScriptが無効になっている場合は機能しない可能性があることを理解していますが、戻るボタンの問題に対して半分まともな応答を達成するのに確かに役立ちます。アンディ

于 2009-04-06T01:29:23.143 に答える
0

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

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

幸運を。

于 2008-09-10T16:19:26.893 に答える
0

この解決策がわかりません:

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

于 2015-10-17T12:16:59.940 に答える
0

新しい Web アプリを最初から作成する場合、またはアプリを作り直す十分な時間がある場合は、JavaScript と AJAX を使用して、ブラウザーの履歴、戻る、および進む機能を回避できます。

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

この手法は質問に答えますが、いくつかの点でベスト プラクティスと矛盾しています。

  • 戻るボタンと進むボタンは期待どおりに動作するはずです。
  • アプリは、新しいブラウザー ウィンドウを開くべきではありません。
  • アプリは JavaScript がなくても機能するはずです。

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

于 2015-06-02T08:53:22.910 に答える