Как Gmail обрабатывает назад / вперед в богатом JavaScript?

Gmail, кажется, имеет какой-то умный способ обработки кнопок «назад» / «вперед» в многофункциональном приложении JS.

В моей организации мы опробовали плагин истории jQuery. Плагин в основном запускает функцию каждые 100 мс, которая анализирует URL и проверяет, изменился ли он. История отслеживается HTTP-якорями, и если якорь изменился, то плагин вызывает указанный пользователем обратный вызов, передавая новую привязку, чтобы страница могла выполнять пользовательское поведение при загрузке нового контента.

Моя организация определила, что плагин истории jQuery не был производственного качества. Я не виню их, если честно, потому что вы действительно не хотите заставлять браузеры своих пользователей запускать функцию каждые 100 мс. Кроме того, это сделало код JS практически невозможным для отладки, потому что нажатие «Разбить на следующее» в Firebug или аналогичном отладчике JS всегда будет отлавливать событие истории jQuery, и никакие другие события не будут рассматриваться.

Итак, мы дали на данный момент о реализации функциональности назад / вперед в браузере. Однако недавно я заметил, что Gmail реализует это довольно хорошо. Он также использует значение привязки HTTP, но я нажал «Break On Next», и Gmail не запускает никаких функций каждые 100 мс. Как Gmail удается реализовать такое поведение «назад / вперед»?

8
задан balupton 11 August 2010 в 17:15
поделиться

2 ответа

Возможно, вы говорите о плагине jQuery History здесь: http://www.balupton.com/projects/jquery-history , который используется во многих качественных сайтах; один из моих любимых - http://wbhomes.com.au/

Если так, то он использует 200мс тест для браузеров старого поколения, которые не реализуют событие onhashchange нативно. Без встроенной реализации этого события вам придется обходить его функциональность, используя изменение интервала - другого способа, насколько мне известно, просто не существует. К счастью, последние версии всех основных браузеров теперь поддерживают событие onhashchange нативно, поэтому эта проверка больше не нужна.

Но, увы, давайте разберемся, что делает эта проверка с интервалом в 200 мс. Если они используют IE6 или 7, то проверяется состояние iframe (так как в этих браузерах iframe необходим для эмуляции кнопок назад и вперед - в других браузерах iframe не требуется). Если пользователь использует другой более старый браузер, не IE, он может просто использовать location.getHash() в проверке (без iframe, как объяснялось ранее). Оба типа проверок разработаны так, чтобы быть чрезвычайно быстрыми и минимально возможными, сводя необходимые накладные расходы практически к нулю. Все дело в том, что браузер на самом деле готов позволить вам сделать, и попытаться сделать это, используя как можно менее интенсивный код.

Примечание: До выхода версии v1.4.2-final (12 августа 2010 года) jQuery History единственным признанным браузером, который поддерживал onhashchange нативно, был IE8 и выше. Эта проблема была решена во всех новых версиях проекта jQuery History.

6
ответ дан 5 December 2019 в 21:15
поделиться

Возможно, вы захотите проверить этот предыдущий вопрос:

Есть ли способ отловить событие кнопки «Назад» в javascript?

Похоже, способ, которым это делается в jQuery, является единственным способ сделать это, потому что YUI тоже делает это:

http://developer.yahoo.com/yui/history/

1
ответ дан 5 December 2019 в 21:15
поделиться
Другие вопросы по тегам:

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