Как наблюдать изменение в URL с помощью JavaScript? - PullRequest
1 голос
/ 25 июня 2019

Документация для события popstate Window гласит:

Обратите внимание, что простой вызов history.pushState() или history.replaceState() не вызовет событие popstate.Событие popstate будет вызвано выполнением действия браузера, например нажатия кнопки «назад» или «вперед» (или вызова history.back() или history.forward() в JavaScript).

Мне нужен способвыполнить некоторый код при изменении URL-адреса с помощью средства, которое не вызывает событие popstate (например, history.replaceState()). Желательно, используя MutationObserver API [1] и наиболее определенно без опроса URL каждые x секунд.

Также, hashchangeне будет, так как я должен действовать на каждое изменение в URL, а не только на хеш-часть.

Возможно ли это?


[1] Объясняется по другому вопросу , почему API-интерфейс MutationObserver для этого не работает.


(другое) Вопросы, связанные с данной:

1 Ответ

1 голос
/ 25 июня 2019

Вам нужно переопределить (обернуть) history.replaceState, который использует другой скрипт:

(function(){
  var rs = history.replaceState; 
  history.replaceState = function(){
    rs.apply(history, arguments); // preserve normal functionality
    console.log("navigating", arguments); // do something extra here; raise an event
  };
}());

Без голосования, без потерь, без переписывания, без хлопот.

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

...