Обнаружение события popstate в истории без запуска якорных ссылокJavascript

Форум по Javascript
Ответить
Anonymous
 Обнаружение события popstate в истории без запуска якорных ссылок

Сообщение Anonymous »

Я работаю над приложением, которое использует динамически загружаемые элементы страницы, которые используют pushState для изменения хеша URL-адреса и добавления записи в историю браузера. Реорганизовать этот код, чтобы просто использовать location.hash = #something для воссоздания того же эффекта, будет слишком сложно. Другой фрагмент кода настроен на перезагрузку страницы при изменении состояния с помощью onpopstate = e => location.reload();
Однако теперь это мешает другим частям веб-сайта. Всякий раз, когда пользователь щелкает ссылку на другой хэш, это вызывает срабатывание события onpopstate, перезагружая страницу при каждом нажатии простой хеш-ссылки.
Ниже приведен минимальный пример такого поведения. Состояние передается раньше после загрузки страницы, а это означает, что любые привязки по ссылкам, на которые нажимают, автоматически выводят это состояние (что для меня проблема).

Код: Выделить всё

document.addEventListener("DOMContentLoaded", function() {
history.pushState(null, null, '#foo'); // ensure `popState` has been executed at least once.
});

window.onpopstate = function() {
console.log('State popped!');
}

Код: Выделить всё

[url=#bar]Click me[/url]


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

Подробнее здесь: https://stackoverflow.com/questions/798 ... chor-links
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Javascript»