この質問についてWebを検索しましたが、何も見つかりませんでした。
戻るボタンのロジックは何ですか?Webブラウザの戻るボタンを押すとどうなりますか?
それについてもっと知りたいです。
ありがとうございました。
この質問についてWebを検索しましたが、何も見つかりませんでした。
戻るボタンのロジックは何ですか?Webブラウザの戻るボタンを押すとどうなりますか?
それについてもっと知りたいです。
ありがとうございました。
回答:
Webブラウザーは、そのウィンドウでアクセスしたWebページのスタック(または、必要に応じてリスト)を保持します。ホームページがgoogle.comで、そこからyoutube.com、yahoo.com、cnn.comなどの他のいくつかのウェブサイトにアクセスするとします。最後のものにアクセスすると、リストは次のようになります。
google.com -> youtube.com -> yahoo.com -> cnn.com
^
|
current page
[戻る]ボタンを押すと、ブラウザは次のようにリストの前のページに戻ります。
google.com -> youtube.com -> yahoo.com -> cnn.com
^
|
current page
この時点で、もう一度[戻る]を押してyoutube.comに移動するか、[進む]を押してcnn.comに戻ることができます。もう一度戻るを押したとしましょう。
google.com -> youtube.com -> yahoo.com -> cnn.com
^
|
current page
たとえばabc.comにアクセスすると、リストは次のように変更されます。
google.com -> youtube.com -> abc.com
^
|
current page
yahoo.comとcnn.comの両方がリストから削除されていることに注意してください。これは、新しいルートを選択したためです。ブラウザは、現在の場所にアクセスするためにアクセスしたページのリストのみを保持し、これまでにアクセスしたすべてのページの履歴は保持しません。また、ブラウザはアクセスしているサイトの構造について何も認識していないため、予期しない動作が発生する可能性があります。
閲覧する製品のカテゴリとサブカテゴリがあるショッピングサイト(簡単な例としてne.com)を使用しています。サイトデザイナーは、ウィンドウの上部近くにパンくずリストを慎重に提供して、カテゴリ間を移動できるようにしています。サイトのトップページから始めて、[ハードウェア]、[メモリ]の順にクリックします。リストは次のようになります。
google.com -> ne.com -> ne.com/hw -> ne.com/hw/mem
^
|
current page
ハードウェアカテゴリに戻りたいので、[戻る]ボタンを使用する代わりに、ブレッドクラムを使用して親カテゴリに移動します。これで、ブラウザリストは次のようになります。
google.com -> ne.com -> ne.com/hw -> ne.com/hw/mem -> ne.com/hw
^
|
current page
サイトの構造によると、後方(レベルアップ)になりましたが、ブラウザではリンクをクリックしたために前方に移動しました。リンクをクリックするか、アドレスバーにURLを入力するたびに、そのリンクから既にアクセスしたページに移動するかどうかに関係なく、ブラウザに関する限り先に進みます。
最後に、メインサイトページ(ne.com)に戻ります。ブレッドクラムを使用することもできますが、今回は[戻る]ボタンをクリックします。これで1レベル上がるはずですよね。しかし、それはあなたをどこに連れて行くのですか?
最初は、多くのユーザー(私も含めて、これを正確に実行する場合)にとって、レベルを「下げて」メモリカテゴリに戻すことは混乱を招きます。ページのリストを見ると、理由が簡単にわかります。
google.com -> ne.com -> ne.com/hw -> ne.com/hw/mem -> ne.com/hw
^
|
current page
[戻る]ボタンだけを使用してメインページに戻るには、さらに2回押す必要があり、ハードウェアカテゴリに「戻り」、最後にメインページに戻ります。私たちプログラマーには何が起こっているのかは明らかなようですが、ブラウザーがたまたまどのWebサイトにある場合でも、階層構造について何も知らないことに気付いていないため、常連ユーザーはいつも驚いています。
ブラウザがサイト設計者に[戻る]ボタンをプログラムさせて、現在のことではなく、明白なこと(レベルを上げる)を実行できるようになれば素晴らしいでしょうか?
編集:コメント投稿者は、ブラウザがページをリロードするのか、それとも単にローカルキャッシュからページを表示するのかを尋ねました。
答えはそれが依存するということです。サイト設計者は、ブラウザがページをキャッシュするかどうかを指定できます。キャッシュされていないものとして設定されているページの場合、[戻る]を押すと、初めてアクセスしたときと同じように、ブラウザがサーバーからページを再読み込みします。キャッシュされたページの場合、ブラウザはキャッシュからページを表示します。これははるかに高速です。
基本的な考え方は、最後のページまたは論理的なサイト分割に戻ることです。
Gmailを見ると、検索を実行してメッセージをクリックし、[戻る]ボタンを押すと、実行した検索に戻ることができます。
ほとんどのブラウザでクリックすると、最後のhttpリクエストが再送信されるか、ブラウザがサイトをキャッシュしている場合はキャッシュが読み込まれます。
これを説明する最も簡単な方法は、擬似コードを使用することだと思います。
class Page:
String url, ...
Page previous, next # implements a doubly-linked list
class History:
Page current # current page
void back():
if current.previous == null:
return
current = current.previous
refresh()
void forward():
if current.next == null:
return
current = current.next
refresh()
void loadPage(Page newPage):
newPage.previous = current
current.next = newPage # remove all the future pages
current = current.next
display(current)
開発者として、ブラウザが[戻る]ボタンをどのように処理しても、Webアプリが機能することを確認する必要があります:-)リクエストを再送信しますか?新しいリクエストは古いリクエストと同じですか、それとも何か違いがありますか?ブラウザはユーザーに再POSTの確認を求めますか?ページのどの要素が再要求され、何がキャッシュから読み込まれますか?ブラウザは私のキャッシュ制御ヘッダーを尊重しますか?
これらの質問への回答は、メーカー、ブラウザのバージョン、およびユーザー設定によって異なります。これらすべてがそれほど重要ではないようにソフトウェアを設計します。
あまり直接的な答えではないことをお詫びしますが、ここにはすでにいくつかの正解があります。
ブラウザは常にページを記憶するために保存し、戻るボタンを押しても前のページのリクエストをサーバーに送信せず、代わりにページを保存したキャッシュを確認し、LIFOルールに従います。最後に開いた戻るボタンを押して、最初にそのページを教えてください
ブラウザは、現在のページの前に最後に表示されたページをロードしてから、発生する可能性のあるリダイレクトに従いますか?
質問のポイントが欠けているようです。