92

この質問について Web を検索しましたが、何も見つかりませんでした。

戻るボタンのロジックは何ですか? Web ブラウザの戻るボタンを押すと何が起こっているのでしょうか?

私は本当にそれについてもっと理解したいと思っています。

ありがとうございました。

4

9 に答える 9

108

Web ブラウザーは、そのウィンドウでアクセスした Web ページのスタック (必要に応じてリスト) を保持しています。ホームページが google.com で、そこから youtube.com、yahoo.com、cnn.com などの他の Web サイトにアクセスするとします。最後の 1 つにアクセスすると、リストは次のようになります。

google.com -> youtube.com -> yahoo.com -> cnn.com
                                            ^
                                            |
                                       current page

[戻る] ボタンを押すと、ブラウザは次のようにリストの前のページに戻ります。

google.com -> youtube.com -> yahoo.com -> cnn.com
                                ^
                                |
                           current page

この時点で、[戻る] をもう一度押して youtube.com に移動するか、[進む] を押して cnn.com に移動します。もう一度 Back を押したとしましょう:

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) に戻ります。ブレッドクラムを使用することもできますが、今回は [戻る] ボタンをクリックします。しかし、それはあなたをどこに連れて行きますか?

最初は多くのユーザー (私がたまたまこれを行ったときに私を含む) が、レベルを「下げて」メモリ カテゴリに戻ることに戸惑いました。ページのリストを見ると、その理由は簡単にわかります。

google.com -> ne.com -> ne.com/hw -> ne.com/hw/mem -> ne.com/hw
                                            ^
                                            |
                                       current page

[戻る] ボタンだけを使用してメイン ページに戻るには、さらに 2 回押す必要があり、ハードウェア カテゴリに「戻り」、最後にメイン ページに移動します。私たちプログラマーにとって何が起こっているのかは明らかなように思えますが、通常のユーザーは、たまたまアクセスしている Web サイトの階層構造についてブラウザーが何も知らないことに気付いていないため、常に驚かされます。

ブラウザーが、サイト デザイナーが [戻る] ボタンをプログラムして、現在の動作ではなく、当然のこと (レベルを上げる) を実行できるようにしたら、素晴らしいでしょうか?

編集:コメンターは、ブラウザがページをリロードするのか、単にローカルキャッシュから表示するのかを尋ねました.

答えは場合によります。サイトの設計者は、ブラウザーがページをキャッシュするかどうかを指定できます。キャッシュしないように設定されているページの場合、[戻る] を押すと、初めてアクセスしたかのように、ブラウザーはサーバーからページを再読み込みします。キャッシュされたページの場合、ブラウザーはそれをキャッシュから表示します。これははるかに高速です。

于 2009-08-21T19:56:18.777 に答える
5

私はそれを私の最後の要求を再発行するものと考えるのが好きです. 単純な GET を実行すると、前回と同じもの (動的コンテンツを除く) が返される可能性があります。POST を実行した場合は、(確認後に) フォームをサーバーに再送信します。

于 2009-08-21T19:25:10.417 に答える
2

これを説明する最も簡単な方法は、疑似コードであると思います。

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)
于 2009-08-21T19:47:15.253 に答える
1

基本的な考え方は、最後のページまたは論理的なサイト分割に戻ることです。

Gmail を見ると、検索を行ってメッセージをクリックし、[戻る] ボタンを押すと、行った検索に戻ることがわかります。

ほとんどのブラウザーでクリックすると、最後の http 要求が再送信されるか、ブラウザーがサイトをキャッシュしている場合はキャッシュが読み込まれます。

于 2009-08-21T19:23:27.470 に答える
1

閲覧したページの履歴は、スタックのような形で保持されます。上位 3 ページ (たとえば、A、B、C) を「ポップ」して別のページ D に移動すると、前に押しても B に戻ることはできません。

于 2009-08-21T19:27:10.583 に答える
0

開発者として、ブラウザーが [戻る] ボタンをどのように処理しても、webapp が機能することを確認する必要があります:-) 要求を再送信しますか? 新しいリクエストは古いリクエストと同じですか、それとも何か違いがありますか? ブラウザーはユーザーに再 POST の確認を求めますか? ページのどの要素が再リクエストされ、何がキャッシュから読み込まれるか? ブラウザーはキャッシュ制御ヘッダーを尊重しますか?

これらの質問に対する回答は、メーカー、ブラウザのバージョン、およびユーザー設定によって異なります。これらすべてがそれほど問題にならないようにソフトウェアを設計してください。

あまり直接的な答えでなくて申し訳ありませんが、ここにはすでにいくつかの率直な答えがあります。

于 2009-08-21T20:04:21.053 に答える
0

ブラウザは常に記憶のためにページを保存し、戻るボタンを押すと、前のページのリクエストをサーバーに送信せず、代わりにページを保存したキャッシュを確認し、LIFO ルールに従います。最後に開いた戻るボタンを押すと、そのページが最初に表示されます

于 2010-09-02T07:27:54.017 に答える
-1

ブラウザは、現在のページの前に最後に表示されたページをロードし、発生する可能性のあるリダイレクトに従いますか?

どうも質問の趣旨がずれているようです。

于 2009-08-21T19:24:42.070 に答える