2017-12-21 11 views
2

Ich habe eine einzelne Seite App mit Seitenumbruch und Filter und müssen erkennen, wenn die aktuelle URL überhaupt ändert. Gibt es keine einfache Möglichkeit, einen Listener zur aktuellen URL hinzuzufügen und bei Änderungen etwas auszulösen? (Keine Intervalle entweder Einstellung!)Listener-Ereignis für, wenn URL-Parameter ändern

  1. Benutzer landet auf www.foobar.com
  2. Benutzer hat etwas, URL Änderungen
  3. Meine Funktion www.foobar.com?filter=hello läuft

Ich habe beide onhashchange versucht und unbeforeunload versucht, und beide sind dafür relevant.

Gibt es eine Möglichkeit, der URL einen Listener hinzuzufügen und bei jeder Änderung etwas auszulösen? (Auch hier einzelne Seite app, so dass keine Refresh)

+1

Mögliche Duplikat [Wie URL Änderung in JavaScript erkennen] (https://stackoverflow.com/questions/6390341/how-to-detect-url-change-in-javascript) – klugjo

+0

Ich schaute mir das an - das ist ein "Onhashchange" -Szenario. Meine ist ein bisschen anders, keine Hashes und ich möchte keine Intervalle einstellen. – user3390251

Antwort

1

Wenn Sie setInterval nicht verwenden möchten, können Sie das history.pushState Ereignis außer Kraft setzen:

(function(history){ 
    const pushState = history.pushState; 
    history.pushState = function(state) { 
     if (typeof history.onpushstate == "function") { 
      history.onpushstate({state: state}); 
     } 
     // Call your custom function here 
     return pushState.apply(history, arguments); 
    } 
})(window.history); 
+0

das wird knapp! obwohl es mir einen Konsolenfehler von Uncaught TypeError gibt: Fehler beim Ausführen von 'pushState' in 'History': 2 Argumente erforderlich, aber nur 1 vorhanden. Es könnte Konflikte mit anderen Code auf der Website geben ... – user3390251

+0

warum 'Geschichte', sollte es' Geschichte' sein? no caps – klugjo

+1

Arrow-Funktionen stellen kein 'arguments'-Objekt zur Verfügung, Sie müssten 'history.pushState = (state, ... args) => {' und 'pushState.call (history, state, ... args); ' –

Verwandte Themen