履歴バック機能はリクエストを記録します。ページはそれ自体を何度も要求するかもしれません。したがって、戻るボタンを押すと、同じページへの前の要求に戻ることがあります。一度に1ページ戻す方法(それ自体ではなく、参照ページに戻る)
Alice.html:
<h1>This is Alice</h1>
<a href="charlie.php">Go to Charlie</a>
Bob.html:
<h1>This is Bob</h1>
<a href="charlie.php">Go to Charlie</a>
Charlie.php:
<h1>This is Charlie</h1>
<p id="output">Here goes the server output</p>
<form method="post">
<input type="hidden" id="somevalue" name="somevalue" value="0">
<button type="button" onclick="window.history.go(-1);">Back</button>
<button type="submit">Calculate</button>
</form>
<script>
// Simulate some server side action
document.getElementById("output").innerHTML = document.getElementById("somevalue").value = "Value = " + Math.random();
</script>
アリスここ
は非常に単純化した例です。 htmlとBob.htmlの両方へのリンクCharlie.php。 Charlie.phpにはフォームがあり、何回かサーバーのデータ操作を行うために何度でも呼び出します。
ヒストリーバック関数は、1ページではなく1リクエストを戻します。アリスまたはボブに戻るには、計算ボタンを隠したのと同じ回数だけバックボタンを押す必要があります。
質問:Charlieへのリクエストの数に関係なく、1ページ戻す方法はありますか?
編集:サーバーサイド変数を使用せずに、単純な「1ページバックアップ」ボタンの汎用ソリューションを探しています。
HTML5のソリューションは問題ありません。
これは興味深い答えです。ありがとう。 しかし、17通りの計算では、再読み込みがたくさんあります! ...改善できますか? –
@ SimonRiget計算ページに移動する前に、直前のページのURLを* sessionStorage *に保存することができます。 * history.go(-1)*の代わりに、 'location.href = sessionStorage.getItem(" href ")'を使用します。必要に応じて* location.replace *を使用し、* sessionStorage.removeItem *を後で使用することを忘れないでください。 – myfunkyside