Как Gmail обрабатывает назад / вперед в богатом JavaScript? - PullRequest
8 голосов
/ 11 августа 2010

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

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

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

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

Ответы [ 2 ]

6 голосов
/ 11 августа 2010

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

Примечание.В истории единственными признанными браузерами, которые изначально поддерживали onhashchange, был IE8 и выше.Это исправлено во всех более новых версиях проекта jQuery History.

1 голос
/ 11 августа 2010

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

Есть ли способ перехватить событие кнопки возврата в JavaScript?

Кажется, что способ сделать это в jQuery - единственный способ сделать это, потому что это то же самое, что делает YUI:

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...