Как делает Кнопку "Назад" в работе веб-браузера?

Когда Вы выбираете блок и используете > для расположения с отступом, он делает отступ, затем возвращается к нормальному режиму. У меня есть это в моем .vimrc файле:

vnoremap < <gv

vnoremap > >gv

Это позволяет Вам расположить свой выбор с отступом столько время, сколько Вы хотите.

79
задан BoltClock 20 July 2012 в 13:35
поделиться

7 ответов

Ваш веб-браузер хранит стек (или список, если хотите) веб-страниц, которые вы посетили в этом окне. Допустим, ваша домашняя страница - 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. Допустим, вы нажимаете 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

Чтобы вернуться на главную страницу, используя только кнопку «Назад», потребовалось бы еще два нажатия, которые вернут вас «назад» в категорию «Оборудование» и, наконец, на главную страницу. Нам, программистам, кажется настолько очевидным, что происходит, но это постоянно удивляет обычных пользователей, потому что они не понимают, что браузер ничего не знает об иерархической структуре любого веб-сайта, на котором они оказались.

Было бы здорово, если бы браузеры позволили дизайнерам сайтов запрограммировать кнопку «Назад» так, чтобы она делала очевидную вещь (поднимала вас на уровень выше), а не то, что она делает сейчас?

Редактировать: Комментатор спросил, перезагружает ли браузер страницу или просто отображает его из своего локального кеша.

Ответ в зависимости от обстоятельств. Дизайнеры сайта могут указать, должен ли браузер кэшировать страницу или нет. Для страниц, которые настроены как некэшированные, браузер перезагружает страницу с сервера, когда вы нажимаете «Назад», как если бы вы посещали ее впервые. Для кешированных страниц

94
ответ дан 24 November 2019 в 10:18
поделиться

Мне нравится думать об этом как о повторной выдаче моего последнего запроса. Если бы вы выполнили простой GET, он, вероятно, вернет то же самое, что и в прошлый раз (за вычетом динамического содержимого). Если вы выполнили POST, вы снова отправите форму (после подтверждения) на сервер.

5
ответ дан 24 November 2019 в 10:18
поделиться

Основная идея состоит в том, чтобы вернуться к последней странице или логическому разделу сайта.

Глядя на Gmail, вы увидите, если вы выполните поиск и нажмете сообщение, а затем нажмите кнопку «Назад». вернет вас к поиску, который вы выполняли.

Когда вы щелкнете по нему в большинстве браузеров, он либо повторно отправит последний HTTP-запрос, либо загрузит кеш, если браузер кэширует сайты.

2
ответ дан 24 November 2019 в 10:18
поделиться

Я думаю, самый простой способ объяснить это в псевдокоде:

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)
2
ответ дан 24 November 2019 в 10:18
поделиться

История просмотренных страниц хранится в виде стека. Когда вы «открываете» три верхние страницы (например, A, B, C), а затем переходите на другую страницу D, вы не можете снова попасть на B, нажав вперед.

1
ответ дан 24 November 2019 в 10:18
поделиться

Как уполномоченный, вы должны убедиться, что ваше веб-приложение работает независимо от того, как браузер обрабатывает кнопку «Назад» :-) Отправляет ли он запрос повторно? Новый запрос идентичен старому или чем-то отличается? Будет ли браузер запрашивать у пользователя подтверждение повторной POST? Какие элементы страницы будут запрашиваться повторно, а какие загружаться из кеша? Будет ли браузер учитывать мои заголовки управления кешем?

Ответы на эти вопросы зависят от производителя, версии браузера и пользовательских настроек. Создавайте программное обеспечение так, чтобы все это не имело большого значения.

Извините за не очень прямой ответ, но здесь уже есть несколько прямых ответов.

0
ответ дан 24 November 2019 в 10:18
поделиться

Браузер загружает последнюю просмотренную страницу перед текущей, а затем следует любому перенаправлению, которое может произойти?

Кажется, я упускаю суть вопроса.

-1
ответ дан 24 November 2019 в 10:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: