Кнопка возврата в браузере, показывающая элементы с 1 по 5, всего элементов 29

Обновлено: 04.07.2024

Есть ли шанс, что простая кнопка «Назад» в нижней части ресурсов, таких как текст или веб-страница, вернет вас обратно к курсу?

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

Вот один из способов, которым я решил эту проблему: я добавил блестящий дополнительный книжный модуль Петра — вы можете поместить все, что хотите, на «страницы» книги — flash, pdf, text, html, и т.д. На последней странице "книги" (или на первой странице, если она только одна) я внес некоторые изменения в код (см. мое обсуждение http://moodle.org/mod/forum/discuss.php?d= 13372), так что есть кнопка выхода, которая позволяет вернуться на домашнюю страницу курса — как над, так и под содержимым. Модуль книги включает умное оглавление; однако, если ваши ресурсы будут состоять только из одной страницы, вы можете легко удалить оглавление со страницы book view.php, оставив вам только содержимое и кнопку «возврат».

Я думаю, это отличная идея, наши студенты постоянно теряются в ресурсах.

Хлебные крошки хороши с точки зрения программиста/веб-разработчика, но проблема в том, что поток глаз и мыши зрителей перемещается вниз по странице, когда они читают/прокручивают страницу, а затем обычно хотят вернуться туда, откуда пришли. , а не обзорную страницу ресурса.

Удобная кнопка «Назад» или ссылка «меню курса» внизу или в конце каждой страницы ресурса/активности могли бы сделать непоследовательную основную навигацию Moodle (исчезающее левое меню) более удобной для неспециалистов.

Спасибо за ответы

Я использовал модуль книги, но рассмотрю опубликованную модификацию.

Я также должен согласиться с тем, что мы не будем использовать навигационную цепочку "ресурсы" для студентов. Даже если это изменение будет сделано, я думаю, что кнопка все еще должна присутствовать. Такие ресурсы, как веб-страницы/текст, обычно означают, что учащийся читает страницу и заканчивает ее внизу. Поэтому логично, что когда они достигают дна, у них есть выбор.

Что касается вопроса о веб-страницах, было бы неплохо, если бы я мог добавлять ресурсы на веб-страницу, чтобы иметь много вспомогательных материалов о ресурсах IYSWIM.

Да, это проблема удобства использования

Я полностью поддерживаю концепцию форума удобства использования для решения вопросов, которые не подходят для других вопросов. Это, однако, подходит сюда

Эта ссылка, которую вы разместили, была действительно коварной.

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

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

Вы заметите, что разница незначительна, но я подозреваю, что если так много людей борются за кнопку, которая возвращает их на главную страницу курса, есть вероятность, что большинство людей вошли в форум модулей ресурсов из раздела Использование Moodle. страница. Цель «хлебных крошек» — вернуть людей туда, откуда они пришли, но если вам придется вернуться через ту страницу форума, на которую вы изначально не заходили, то вы запутаете людей.

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

На самом деле, в приведенном выше примере вместо слова "форум" может стоять название темы или недели

Мой голос принадлежит этому

Возможно, здесь дело в настройке хлебных крошек сайта.

На самом деле, недавно я поднял навигационные крошки в качестве запроса функции в системе отслеживания ошибок. В данный момент занят, поэтому не могу получить ссылку, но если вы ищете ее там, вы можете добавить свои собственные комментарии.

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

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

В этом контексте запись форума (т. е. текущего типа деятельности) в навигационной цепочке имеет смысл (по крайней мере, для меня, хотя я программист/веб-разработчик, и тон некоторых дискуссий в последнее время приводит меня к думать, что поэтому я лишен права высказывать мнение по вопросам удобства использования).

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

Именно так, хлебные крошки никогда не представляют путь, по которому вы шли . в каждом браузере есть единая кнопка «Назад», которая работает во всей сети (О-о-о).

Мартин, вы явно не работаете с тем же программистом, что и я. Он внезапно решил, что было бы неплохо отключить функцию кнопки «Назад» для всего сайта базы данных, над которым мы работаем, чтобы исключить эти сообщения с постданными (о чем я никогда не возражал). Проблема была в том, что он не удосужился включить собственную кнопку «Назад» на каждую страницу, как он должен был бы иметь в качестве альтернативы. Теперь мне пришлось просить его вернуть нам кнопку «Назад».

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

Здравствуйте, Дэвид! Я думаю, что проблема связана с фамильярностью, а не обязательно с названием должности. Я имел честь присутствовать на выступлении Джефа Раскина несколько лет назад, где он обсуждал, например, почему заглавные буквы и клавиши вставки находятся там, где они есть (программисты пригрозили восстанием, если их переместят).

Я думаю, главное то, что для людей, которые привыкли к тому, как работает система, это кажется вполне понятным и привычным, в то время как, когда вы тратите много времени на обучение людей системе или ответы на их вопросы, проблемы с интерфейсом становятся более серьезными. очистить.

Это, конечно, не уникально для Moodle, с нашими тренингами Blackboard есть много вещей в интерфейсе, которые также излишне сложны или запутаны (получение «квитанции», которая должна быть «принята» почти для каждого действия, например ), но с Blackboard ничего нельзя сделать (кроме переключения).

Да, запрос ссылки на домашнюю страницу внизу интересен и встречается довольно часто. Это интересно, потому что ссылка на самом деле есть внизу КАЖДОЙ страницы Moodle, просто так получилось, что кто-то в какой-то момент решил сделать ее очень маленькой, и, как следствие, ее никто не замечает. Небольшое изменение в таблице стилей — это все, что нужно, класс называется homelink.

Это крошечная ссылка, но, возможно, вместо того, чтобы делать ее кнопкой, вы могли бы просто добавить слова «Вернуться к» в начале строки, например «Вернуться к использованию Moodle».

Конечно, название курса довольно очевидно в хлебных крошках!

Существует также меню "Переход" в правом верхнем углу, которое в любом случае избавляет от необходимости возвращаться на страницу курса.

Ссылка «Индекс» (например, «Ресурсы») предназначена для того, чтобы было понятно, чем занимается пользователь. В исходном тематическом исследовании Moodle я обнаружил, что студенты сначала немного запутались в том, чем Форум отличается от Журнала и скоро. Постоянное наличие его в заголовке предназначено для того, чтобы помочь вам узнать о различных типах модулей в Moodle по ходу работы.

Он также предоставляет удобную ссылку на обзор этой деятельности . Вы заметили, как выглядит обзор журнала для курса? Мои студенты также сочли полезным просматривать все материалы для чтения (теперь называемые «Ресурсы») на одной странице — это обеспечивает (подобное книге) оглавление всех текстов в курсе.

Я вижу мнение людей о включении туда слов "Неделя 1" или "Тема 1" . это имело бы смысл для этих двух форматов курса. Я предполагаю, что другие форматы курса могли бы просто пропустить это, но это сделало бы интерфейс непоследовательным. Другая проблема заключается в том, что такой элемент в любом случае будет просто ссылаться на страницу курса и дублировать ссылку на курс, так что же делать? Я думаю, что, вероятно, поэтому я пропустил это.

Как бы то ни было, одна из вещей, которую Джон недавно представил в работе над страницами в Moodle, — это способ передачи навигационной информации в виде массива, который будет отображаться центральной функцией (в настоящее время строка форматируется соответствующей страницей и передается в -тото.. Лучше бы я никогда этого не делал). Новый метод (после перехода на него всего Moodle) позволит администраторам настраивать навигацию в соответствии со своими потребностями.

Ссылка «Индекс» (например, «Ресурсы») предназначена для того, чтобы было понятно, чем занимается пользователь. В исходном тематическом исследовании Moodle я обнаружил, что студенты сначала немного запутались в том, чем Форум отличается от Журнала и скоро.Постоянное наличие его в заголовке предназначено для того, чтобы помочь вам узнать о различных типах модулей в Moodle по ходу работы.

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

С другой стороны, я, вероятно, буду использовать разные модули для того, что в учебнике для студентов трактуется как одно и то же. У викторины есть некоторые возможности, которые лучше всего подходят для выполнения упражнений в определенных главах, тогда как задание или какой-либо другой модуль может быть лучшим выбором для других упражнений. Дело в том, что я не буду использовать викторину как викторину как таковую, а просто как простой способ увидеть, правильно ли дали учащиеся ответы или нет, чтобы не пришлось вручную оценивать 70 пунктов с краткими ответами, которые у всех есть. только один-два правильных ответа. Поэтому я не хочу, чтобы студенты видели разные названия того, что для них одно и то же, и, конечно же, я не хочу, чтобы они сбивались с толку, думая, что проходят тест, хотя на самом деле это не так.

Это приводит меня к двум вопросам, так как я хотел бы взломать пару вещей:

1-Вы сказали, что в данный момент хлебные крошки контролируются на каждой странице. Я полагаю, это означает, что в настоящее время нет простого способа избавиться от лишнего шага?

2-Что управляет отображением при наведении указателя мыши названия типа модуля в режиме просмотра курса? Я думаю, что хотел бы избавиться от него или, что еще лучше, заменить его описанием действия или ресурса, который я ввел.

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

Важно:

  • Некоторые из этих шагов работают только на Android 10 и более поздних версиях. Узнайте, как проверить версию Android.
  • Некоторые из этих шагов требуют касания экрана.

Выберите способ передвижения

  1. Откройте приложение "Настройки" на телефоне.
  2. Перейдите к SystemGesturesСистемная навигация.
    • Если вы не можете найти Системную навигацию, перейдите к инструкциям для более старых версий Android.
    • Если вы не можете найти систему или жесты, чтобы изменить настройки навигации, обратитесь за помощью к производителю устройства.
  3. Выберите вариант:
    • Навигация с помощью жестов: без кнопок.
    • Двухкнопочная навигация: две кнопки "Домой" и "Назад".
    • Трехкнопочная навигация: три кнопки: "Домой", "Назад" и "Обзор приложений".

Перемещение между экранами, веб-страницами и приложениями

Откройте предыдущий экран, на который вы смотрели. Вы можете вернуться не один раз. Но когда вы дойдете до главного экрана, вы уже не сможете вернуться назад.

  • Навигация с помощью жестов: проведите пальцем от левого или правого края экрана.
  • Двухкнопочная навигация: нажмите "Назад" .
  • 3-кнопочная навигация: нажмите "Назад" .
  • Навигация с помощью жестов: проведите вверх от нижнего края экрана.
  • Двухкнопочная навигация: нажмите "Домой" .
  • Навигация с помощью трех кнопок: нажмите "Домой" .

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

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

Здесь вы можете:

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

Перемещать элементы

Нажмите, чтобы выбрать

Чтобы выбрать или запустить что-то на телефоне, коснитесь его.

Нажмите, чтобы ввести

Чтобы ввести текст, коснитесь нужного места. Вы увидите открытую клавиатуру.

Нажмите и удерживайте

Нажмите и удерживайте элемент на экране. Когда элемент ответит, поднимите палец.

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

Проведите пальцем по экрану

Быстро проведите пальцем по поверхности экрана, не останавливаясь. Например, вы можете смахнуть главный экран влево или вправо, чтобы найти другие главные экраны.

Нажмите дважды, чтобы изменить размер

На некоторых страницах, таких как веб-страница или карта, нажмите дважды, чтобы приблизиться ("увеличить масштаб").

Сожмите и раздвиньте, чтобы изменить размер

В некоторых приложениях коснитесь экрана двумя или более пальцами, чтобы изменить его размер. Чтобы уменьшиться, сведите пальцы вместе. Чтобы увеличить, раздвиньте их.

Повернуть

Когда вы поворачиваете телефон, большинство экранов могут поворачиваться вместе с ним. Чтобы включить или отключить вращение, проведите двумя пальцами сверху вниз и нажмите "Автоповорот".

Важно! Некоторые из этих шагов работают только на Android 11 и более поздних версиях. Узнайте, как проверить версию Android.

Выберите способ передвижения

  1. Откройте приложение "Настройки" на телефоне.
  2. Перейти к SystemGesturesСистемная навигация.
  3. Выберите вариант:
    • Навигация с помощью жестов: без кнопок.
    • Трехкнопочная навигация: три кнопки: "Домой", "Назад" и "Обзор приложений".
    • Двухкнопочная навигация (Pixel 3, 3 XL, 3a и 3a XL): две кнопки для перехода на главный экран и назад.

Перемещение между экранами, веб-страницами и приложениями

Откройте предыдущий экран, на который вы смотрели. Вы можете вернуться не один раз. Но когда вы дойдете до главного экрана, вы уже не сможете вернуться назад.

  • Навигация с помощью жестов: проведите пальцем от левого или правого края экрана.
  • 3-кнопочная навигация: нажмите "Назад" .
  • Двухкнопочная навигация (Pixel 3, 3 XL, 3a и 3a XL): нажмите "Назад" .
  • Навигация с помощью жестов: проведите вверх от нижнего края экрана.
  • Навигация с помощью трех кнопок: нажмите "Домой" .
  • Двухкнопочная навигация (Pixel 3, 3 XL, 3a и 3a XL): коснитесь главного экрана .

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

  • Навигация с помощью жестов. Смахните снизу вверх, удерживайте, а затем отпустите.
  • Навигация с помощью трех кнопок: коснитесь «Обзор» .
  • Двухкнопочная навигация (Pixel 3, 3 XL, 3a и 3a XL). Проведите по экрану снизу вверх к центру.

Здесь вы можете:

  • Закройте приложения. Проведите вверх по изображению приложения.
  • Открытие приложения. Коснитесь его изображения.
  • Создание снимка экрана. Нажмите «Снимок экрана» .
  • Выберите текст (выбранные языки). Коснитесь «Выбрать» . Затем выберите слова на изображении приложения и нажмите «Копировать», «Поделиться» или «Поиск». .

Важно! При двухкнопочной навигации вы не можете сделать снимок экрана или выделить текст во всех открытых приложениях. Узнайте о других способах делать скриншоты.

  • Навигация жестами. В самом низу экрана проведите пальцем слева направо.
  • Навигация с помощью трех кнопок. Коснитесь «Обзор» . Проводите пальцем вправо, пока не найдете нужное приложение. Коснитесь его.
  • Двухкнопочная навигация (Pixel 3a и более ранние версии). Чтобы переключиться между двумя последними приложениями, проведите вправо по главному экрану .
  • Навигация с помощью жестов. Проведите вверх от нижнего края или середины главного экрана.
  • Навигация с помощью трех кнопок: проведите вверх от нижнего края или середины главного экрана.
  • Двухкнопочная навигация. Проведите вверх от центра главного экрана.

Вы можете выполнять поиск объектов в приложениях и настройках по всему телефону. Это отличается от поиска в Интернете с главного экрана.

  1. Перейти на главный экран.
  2. Проведите вверх, чтобы открыть экран выбора приложений.
  3. В поле поиска вверху введите ключевые слова.

Перемещать элементы

Нажмите, чтобы выбрать

Чтобы выбрать или запустить что-либо на телефоне, коснитесь его. В некоторых приложениях вы можете нажать и удерживать текст, чтобы найти доступные действия, такие как бронирование столика в ресторане или воспроизведение песни.

Нажмите, чтобы ввести

Чтобы ввести текст, коснитесь нужного места. Вы увидите открытую клавиатуру.

Нажмите и удерживайте

Нажмите и удерживайте элемент на экране. Когда элемент ответит, поднимите палец.

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

Проведите пальцем по экрану

Быстро проведите пальцем по поверхности экрана, не останавливаясь. Например, вы можете смахнуть главный экран влево или вправо, чтобы найти другие главные экраны.

Нажмите дважды, чтобы изменить размер

На некоторых страницах, таких как веб-страница или карта, нажмите дважды, чтобы приблизиться ("увеличить масштаб").

Сожмите и раздвиньте, чтобы изменить размер

В некоторых приложениях коснитесь экрана двумя или более пальцами, чтобы изменить его размер. Чтобы уменьшиться, сведите пальцы вместе. Чтобы увеличить, раздвиньте их.

Повернуть

Когда вы поворачиваете телефон, большинство экранов могут поворачиваться вместе с ним. Чтобы включить или отключить вращение, проведите двумя пальцами сверху вниз и нажмите "Автоповорот".

До недавнего времени мы, разработчики, мало что могли сделать с состоянием и историей браузера. Мы могли бы проверять количество элементов в истории и перемещать пользователей вперед и назад, но это дает пользователю мало пользы.С появлением более динамичных веб-страниц нам нужно больше контроля. К счастью, HTML5 дает нам такой контроль, расширяя JavaScript History API.

Само собой разумеется, что URL-адреса важны. Это метод доступа к обширным коллекциям информации и ресурсов в Интернете, а совсем недавно они стали представлять предполагаемое состояние веб-приложения. Вы можете скопировать эти URL-адреса и поделиться ими с друзьями или использовать их для создания ссылок из любого HTML-документа. Это жилы Интернета, и о них нужно заботиться.

Ранее API истории JavaScript предлагал несколько очень простых функций:

В динамических веб-приложениях Ajax, где браузер обновляет страницу по частям, а не полностью меняет местоположение, сложно дать пользователю URL-адрес, чтобы добавить его в закладки или поделиться текущим состоянием приложения. Идентификаторы фрагментов, подобные используемым в заголовках этой статьи с помощью атрибута id, предоставляют некоторую информацию о состоянии, но они полностью зависят от сценариев на стороне клиента.

Изменения в History API предназначены для того, чтобы дать разработчикам возможность отправлять элементы истории в браузер, чтобы встроенные действия назад и вперед могли циклически перемещаться по этим элементам. Эти элементы истории также могут содержать данные, которые впоследствии можно извлечь для восстановления состояния страницы.

Страницы могут добавлять объекты состояния между своей записью в истории сеанса и следующей («пересылаемой») записью. Затем они возвращаются в сценарий, когда пользователь (или сценарий) возвращается в историю, что позволяет авторам использовать метафору «навигации» даже в одностраничных приложениях.

– WHATWG

Если пользователь копирует или добавляет в закладки URL-адрес с отслеживанием состояния и посещает его позже, серверная часть может быть настроена на интерпретацию такого URL-адреса и переход пользователя прямо на нужную страницу и/или в нужное состояние.

В этой статье я расскажу об использовании History API на стороне клиента, поэтому убедитесь, что вы настроили свой сервер для работы с новыми URL-адресами. Если вы уже создали доступный веб-сайт с этими точками входа, вы смеетесь!

  • Идентификатор фрагмента доступен только на стороне клиента. Это означает, что его может использовать только JavaScript, поэтому браузерам без включенного JavaScript не повезло.
  • Поскольку сервер не получает путь после хэш-банга, удаление этого кода JavaScript прекращает поддержку всех этих URL-адресов. Столько неработающих ссылок, так что вы застряли с этим JavaScript навсегда.
  • Это некрасиво. Это взлом, и он выглядит так.

Hashbang никогда не задумывался как долгосрочное решение, поэтому не полагайтесь на него. Если вы все же используете хеш-банды, будьте готовы иметь дело с последствиями (и возможной негативной реакцией со стороны веб-пуристов).

Эти примеры будут накладываться друг на друга. Мы начнем с простого HTML-документа с некоторыми встроенными стилями и сценариями для вашего удобства.

Мы будем работать исключительно внутри тега, добавим новый слушатель для события popstate:

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

Откройте новую страницу в браузере, кликните по ней, как раньше, а затем нажмите назад. Как и раньше, URL-адрес в адресной строке меняется по мере того, как вы переключаетесь между состояниями, но теперь содержимое также восстанавливается до того состояния, в котором оно должно быть. Нажмите вперед, и содержимое также будет правильно восстановлено.

Если вы посмотрите на консоль разработчика в Chrome при первой загрузке страницы, вы увидите, что событие popstate запускается сразу, еще до того, как вы нажмете на ссылку. Это связано с тем, что Chrome считает начальную загрузку страницы изменением состояния и запускает событие. В этом случае свойство состояния имеет значение null , но, к счастью, с этим справляется функция updateContent. Имейте это в виду при разработке, так как это может застать вас врасплох, особенно если другие браузеры предполагают такое поведение.

К сожалению, каким бы фантастическим ни был HTML5, он не позволяет нам путешествовать во времени. Если бы это было так, я бы вернулся в свое детство и сказал себе помоложе: «Да, ты должен съесть кусочек торта». Понимайте это как хотите.

Однако History API позволяет нам вносить исправления в элементы нашего журнала истории. Например, мы могли бы обновить текущее состояние в ответ на новый ввод пользователя в форму. Мы можем сделать это с помощью history.replaceState .

replaceState работает так же, как и pushState, с теми же параметрами, за исключением того, что он обновляет текущую запись, а не добавляет новую. Я могу вспомнить одну ситуацию в нашей демонстрации, где это можно было бы использовать: начальная загрузка страницы. Если вы нажмете назад достаточно долго, вы обнаружите, что возврат к исходному URL-адресу не предоставляет вам исходный контент.Давайте исправим это, добавив следующее в конец нашего скрипта:

Поскольку он запускается при загрузке страницы, он сохраняет исходное состояние страницы. Позже мы можем загрузить это состояние, когда пользователь вернется к этому моменту через прослушиватель событий, который мы настроили ранее. Вы можете попробовать это, загрузив страницу, щелкнув несколько ссылок, а затем нажимая назад, пока не вернетесь к исходному URL-адресу. Первоначальный контент вернулся!

Я создал демонстрацию нашего готового кода. Я также добавил немного внутренней магии, чтобы наши URL-адреса history.pushState работали как настоящий сайт. Помните, что URL-адреса, которые вы отправляете, должны быть активными URL-адресами, которые пользователь может добавить в закладки и поделиться ими в качестве реальных точек входа на ваш сайт.

Последние версии Chrome (5+), Safari (5.0+), Firefox (4.0+) и Opera (11.50+) поддерживают новый History API. Даже некоторые мобильные браузеры работают нормально, например, Mobile Safari на iOS 4+. К сожалению, IE 9 и более ранние версии не поддерживаются, но когда появятся.

Safari 5.0 иногда демонстрирует одну странность: при переходе между состояниями индикатор загрузки появляется и остается даже после загрузки состояния. Это останавливается, когда вы уходите, используя ссылку или действие, которое не связано с состоянием, сохраненным API истории.

Для History API существует полифилл. Удачно названный History.js использует событие hashchange HTML4 с идентификаторами фрагментов документа, чтобы имитировать API истории в старых браузерах. Если один из URL-хэшей используется современным браузером, он использует replaceState для незаметного исправления URL-адреса.

Звучит как волшебство, но убедитесь, что вы знаете о последствиях использования идентификаторов фрагментов, как упоминалось ранее в этой статье. Поэтому автор History.js составил руководство под названием «Интеллектуальная обработка состояний».

URL-адреса выходят за рамки сеанса просмотра пользователем. Они являются исторически важными маркерами ресурсов, которые вполне могут использоваться в течение многих лет. Прежде чем приступить к разработке JavaScript для своего сайта, вам следует подумать о дизайне URL-адресов. Сделайте их осмысленными и организованными. Убедитесь, что вы можете получить к ним прямой доступ без JavaScript. Только после этого вы должны добавить свой JavaScript, чтобы улучшить работу в Интернете.

Категория

Майк Робинсон

Эта статья была написана Майком Робинсоном. Разработчик из компании Lift в Рединге, Англия, вы можете найти его в Твиттере или иногда в блоге на его собственном сайте, akamike. Вне Интернета Майк обычно играет или слушает прогрессивный рок.

26 откликов на статью «Отправка и извлечение с помощью History API»

Я буквально *только* обнаружил это и работал над этим для клиента две недели назад. Я даже подумывал написать об этом в блоге, потому что мне это показалось крутым. Это действительно может изменить правила игры.

Я удивлен, что вы не упомянули функцию history.state? Я считаю, что это текущая спецификация, хотя она работает только в Firefox. Используемый здесь код, хотя он и работает, я думал, что он является частью оригинальной версии спецификации. Также стоит отметить, что вы *должны* передавать объект JavaScript, как в вашем примере. В блоге Microsoft IE есть примеры передачи строки. Я не проверял поддержку этого в разных браузерах, но об этом стоит упомянуть.

Я буквально не могу сказать вам, сколько часов вся проблема «Сохраните первоначальный контент, чтобы мы могли вернуться к нему позже» оказалась для меня проблемой. Мне кажется нелогичным, что состояние по умолчанию, к которому вы пришли, не находится в стеке истории.

Я тестирую демо-страницу в Internet Explorer 9 и не вижу никакой разницы с Chrome, так что, похоже, она работает.

Я обязательно воспользуюсь этой статьей для будущего проекта. Спасибо!

спасибо, что поделились своим опытом, очень информативно.

Не могли бы вы подробнее рассказать о том, что вы делали на сервере для обработки поддельных URL-адресов? Это ручные перенаправления, которые вы вставили, или автоматические перезаписи? Как они конвертируются?

Большое спасибо!

Привет, Майк!
У меня тот же вопрос, что и у Рафаэля. Что вы сделали в серверной части для обработки URL-адресов?

Тем временем я немного продвинулся в этом вопросе. Если ваш веб-сервер — Apache, вы можете настроить его на использование mod_rewrite, который позволяет преобразовывать URL-адреса, введенные пользователем (или поисковым роботом), в другие URL-адреса на стороне сервера:

Это делается путем добавления ряда правил в файл .htaccess в корне вашего сайта.

Буквально только что запустил свой новый сайт, использующий эту технику. Это прекрасно работает!

Хорошо (возможно) избавиться от хэшей и хэш-бангов на будущих сайтах на основе ajax.

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

Единственные проблемы возникают (как это часто бывает) с кросс-браузерной реализацией этого. API истории может поддерживаться упомянутыми вами браузерами, но с разной степенью успеха.

И снова отличная статья. Действительно подходит к основным принципам.

Это здорово, но если это не работает в IE9 или более ранних версиях, в настоящее время это практически бесполезно для рабочих сайтов (без большого количества хаков и откатов!)

Прошу прощения за поздний ответ! Для демонстрации я использовал очень простую настройку mod_rewrite и PHP.

Правило перезаписи ^(пушистик|носки|бакенбарды|боб)$ index.php?p=$1 [NC,L]

Приведенное выше правило перезаписи маскирует демонстрационные URL-адреса и передает их в один PHP-файл со строкой запроса о том, какую кошку пытается просмотреть пользователь. Затем файл PHP проверяет правильность $_GET['p'] (всегда очищайте и проверяйте ввод по мере необходимости), а затем использует предопределенные переменные, которые я установил для этого кота.

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

Надеюсь, это поможет.

Спасибо, что поделились. Я прошел аналогичный путь, используя mod_rewrite в то же время в .htaccess.

Можно ли посмотреть этот файл htaccess поближе. Я понимаю все, что здесь происходит, в части истории API, кроме mod_rewrite. У вас действительно есть больше страниц, живущих где-то для каждой из этих разных кошек? Обновление страницы после того, как вы нажали на несколько кошек, возвращает ошибку «страница не найдена». Это связано с частью htaccess, которую мне не хватает, верно? Спасибо.

функция supports_history_api() return !!(window.history && history.pushState);
>

Спасибо, Майк, ваша демонстрация помогла мне. У меня была попытка немного сложнее, чем нужно.

Однако я пытаюсь отслеживать и обнаруживать, когда пользователь перемещается вперед и назад по истории, чтобы я мог добавить соответствующие переходы на свою страницу. К сожалению, API истории не позволяет узнать, была ли нажата кнопка «вперед» или «назад» в событии popstate. Это было бы очень полезно.

Я думаю, что cookie может быть единственным способом попытаться отследить заказ. Сохранение предыдущей переменной в объекте состояния усложняло работу и вызывало проблемы с браузером.

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

Еще раз спасибо за отличную демонстрацию.

htaccess для маршрутизации URL-адресов pushstate истории html5.

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

Popstate срабатывает всякий раз, когда вы нажимаете кнопку "назад" или "вперед".

Но что вообще срабатывает, когда вы запускаете команду pushState, например, нажав на ссылку?

В каталоге: demos/history/
создайте .htaccess со следующим кодом:


RewriteEngine On
RewriteRule ^(fluffy|socks|whiskers|bob)$ index.php?p=$1 [NC,L]

Спасибо за этот урок,
Я следую статье, чтобы попрактиковаться, но застрял в popstate. Я не могу понять, как заставить кнопку «Назад» работать.

вот ссылка и пример кода

Демонстрация
$('.subject').click(function() $.ajax( url: 'index.php?id=' + $(this).attr('rel'),
успешно: function(html) $('.content').append(html);
>
>);
var pageurl;
pageurl = 'index.php ?id=' + $(this).attr('rel');
if(pageurl != window.location) window.history.pushState(, “”, pageurl);
>
вернуть ложь;
>);

благодарны за любую помощь,

Здравствуйте!
Интересно, какой php-код используется для определения того, на какой странице вы находитесь?

Читайте также: