Как работает навигация по письмам в Gmail?

В web-интерфейсе Gmail навигация по письмам сделана следующим образом:

Изначально мы на странице «Входящие»
https://mail.google.com/mail/?hl=ru&shva=1#inbox


Нажимаем на письмо и попадаем на
https://mail.google.com/mail/?hl=ru&shva=1#inbox/12c4911509040a02

При этом открывается само письмо.

Как видно, мы работаем через «решетку» #, поэтому перезагрузки страницы не происходт, вместо этого происходит переход «по якорю». Тем не менее, URL меняется, и браузер делает переход без отправки запроса на сервер, в результате чего мгновенно открывается текст письма (который уже где-то хранился в DOM и посредством JS выводится пользователю), и становится доступной кнопка «Назад» в браузере, что очевидно. Если ее нажать, мы возвращаемся к списку писем, текст письма при этом скрывается, конечно же без перезагрузки страницы, и это очень быстро работает.

Вопрос: Как это работает? Конкретно, после нажатия «Назад». Ведь мы работаем на одной странице, нужно как-то закрыть открытое письмо. Как работает этот механизм? Какое события обрабатывается? Надеюсь, суть вопроса ясна.
  • Вопрос задан
  • 2809 просмотров
Пригласить эксперта
Ответы на вопрос 4
burdakovd
@burdakovd
В GWT есть средства для назначения обработчиков для разных history token (то что после #).

http://examples.roughian.com/index.htm#Tutorials~History_Support

Не уверен, но подозреваю, что gmail тоже на GWT.
Ответ написан
@deeperton
Таймер просматривающий урл и генерирующий нужные события. События изменения урла в браузере нет.

Кнопка Назад обслуживается самим браузером при изменении урла.
Ответ написан
burdakovd
@burdakovd
>> В реальности сначала открывается письмо, а потом уже по событию, проставляется некий якорь

Как вы тогда объясните, что если есть открытое письмо. Копируем url типа https://mail.google.com/mail/?shva=1#inbox/19c8764cb4a704af, вставляем в другой вкладке, и снова открывается письмо. То есть контент зависит от url, а не наоборот.

Также если посмотреть на меню слева: там просто ссылки: https://mail.google.com/mail/?shva=1#inbox, https://mail.google.com/mail/?shva=1#mbox, https://mail.google.com/mail/?shva=1#starred и т.д… А вот уже после перехода по этой ссылке в недрах GWT срабатывает обработчик изменения url, дергает обработчик, соответствующий токену (inbox/mbox/starred), и обработчик отображает нужный контент.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
04 июл. 2020, в 18:19
3500 руб./за проект
04 июл. 2020, в 17:51
20000 руб./за проект
04 июл. 2020, в 17:25
2000 руб./за проект