Hashchange не срабатывает, когда пользователь нажимает на ту же ссылку

Я создаю клиент HTML и Javascript для работы в браузере, который общается с REST API. Я использую RouteMap для установки своих URL-адресов. Так что я держал конвенцию что-то вроде этого

http://mysite.com/#/{ResourceName}/[edit|view|list]/[Id]/

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

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

Любая помощь будет признательна.


person IsmailS    schedule 27.12.2011    source источник


Ответы (1)


Для № 1 вы, вероятно, захотите прикрепить обработчик к событию клика по ссылке. Таким образом, вы можете определить, нажата ли ссылка. Когда я использую onhashchange, я всегда прикрепляю что-то к событию click, чтобы помочь полифилам для onhashchange, так что, по крайней мере, я могу сказать, когда он терпит неудачу.

Что касается № 2, я хочу отметить, что автоматическое изменение истории пользователя проблематично. Вы можете заполнить чью-то историю мельчайшими, бессмысленными изменениями хэша. Я рекомендую изменять историю только тогда, когда пользователь действительно взаимодействует. Если не считать этого, HTML5 предлагает pushState и popState. Справочник

person kojiro    schedule 27.12.2011