Как сделать так, чтобы кнопка возврата браузера возвращала вас через вызовы AJAX? - PullRequest
8 голосов
/ 10 мая 2011

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

Я видел несколько сайтов (gmail, facebookи т. д.) используйте хеш-символ в URL, чтобы взломать кнопку «назад», чтобы она выполняла вызовы AJAX, а не возвращалась к предыдущему полностраничному запросу.Я хотел бы сделать это, чтобы изменить URL-адрес перед отправкой страницы, чтобы при нажатии кнопки «Назад» загружались ранее выбранные поля.

Например:

В Gmail, если я просматриваю свой почтовый ящиктогда мой URL выглядит следующим образом: https://mail.google.com/mail/?shva=1#inbox

Затем, если я нажимаю «Отправленная почта», выполняется вызов AJAX, и мой URL изменяется так: https://mail.google.com/mail/?shva=1#sent

Я действительнонравится это поведение и хочу дублировать его.Как это достигается?

  1. Ваши ссылки на самом деле вызывают какой-либо javascript или они просто ссылаются на URL с соответствующей информацией хеш-символа?

  2. Как вы читаете информацию о хэш-символах в javascript?

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

ПРИМЕЧАНИЕ. Я использую C # с ASP.NET Web Forms и ASP.NET MVC 3.0 на случай, если это вообще имеет значение.

Ответы [ 3 ]

4 голосов
/ 10 мая 2011

Чтобы манипулировать хэштегами, посмотрите на location.hash (javascript).

Вас также заинтересуют новые элементы состояния push / pop в HTML 5. https://developer.mozilla.org/en/DOM/Manipulating_the_browser_history.

github сделал несколько классных вещей с этим. Проверьте их запись в блоге на их функции слайдера дерева в https://github.com/blog/760-the-tree-slider.

Существует также плагин истории jQuery на http://tkyk.github.com/jquery-history-plugin/. (РЕДАКТИРОВАТЬ: я вижу, Джо избил меня до этого).

3 голосов
/ 10 мая 2011

взгляните на плагин jquery history http://tkyk.github.com/jquery-history-plugin/ Я использовал его в прошлом, и он может делать то, что вы хотите.

2 голосов
/ 10 мая 2011

Плагин JQuery: http://tkyk.github.com/jquery-history-plugin/

Еще одна библиотека jQuery, которую я использовал в прошлом:

jQuery BBQ: кнопка возврата и библиотека запросов

Кроме того, более урезанная версия предыдущей версии, если вам не нужны все ее функции и просто предоставляет вам событие hashchange для всех браузеров:

jQuery hashchange event

ПРИМЕЧАНИЕ: Так же, как краткое введение в вышеуказанные библиотеки.Событие hashchange изначально поддерживается новыми (поддерживаемыми HTML5) браузерами, и в этом случае сценарии будут просто привязываться к этому событию.Для старых браузеров, которые не поддерживают это событие, сценарий создает цикл опроса для имитации события.В любом случае вы можете привязаться к событию и обработать его соответствующим образом.

РЕДАКТИРОВАТЬ: Чтобы ответить на ваши вопросы:

  1. Ссылки не запускают JavaScript, ссылки простоизмените URL с помощью хэша.Событие hashchange отслеживает это действие, и когда хэш изменяется (который регистрируется в стеке истории браузера), оно запускается.
  2. location.hash используется для считывания значения хеш-функции и любого подходящего анализа, который вам понадобится изэтот момент.
  3. Возможно, недостаточно SEO подкован, чтобы дать вам полный ответ на этот вопрос, но вполне уверен, что поисковые системы НЕ индексируют хэши.
  4. Преимущества этого метода - удобство использования, поскольку ваши пользователи будутв состоянии правильно использовать свои кнопки назад.Также любые history.back(0) вызовы javascript также будут работать должным образом (они мне не нравятся, но люди их используют).Минусы в том, что когда вы изначально разрабатываете, вы можете получить некоторые странные ошибки в зависимости от того, как написан ваш код.В целом, хотя, я думаю, что с использованием плагинов большая часть трудозатрат была исключена из процесса, и это отличный метод для удобства использования.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...