Ich möchte überprüfen, ob jedes Mal, wenn sich die URL geändert hat, ich ein Ereignis auslösen würde. Da gibt es keine pushstate Ereignis folge ich diesem Rat How to get notified about changes of the history via history.pushState?Wie kann sichergestellt werden, dass das Ereignis nur einmal hinzugefügt wird?
(function(history) {
var pushState = history.pushState;
history.pushState = function(state) {
if (typeof history.onpushstate == "function") {
history.onpushstate({
state: state
});
}
return pushState.apply(history, arguments);
}
function e(event) {
console.log("location: " + document.location + ", state: " + JSON.stringify(event.state));
}
window.addEventListener('popstate', e);
history.onpushstate = e;
})(window.history)
jedoch meine lib erlaubt mutliple Instanzen. Wenn ich meine Bibliothek mehrere Male initialisiere, würde ich Nachrichten erhalten, je nachdem wie oft die Bibliothek initialisiert wurde. Ist es trotzdem möglich, dass ich sicherstellen kann, dass nur ein Ereignis angehängt ist, obwohl ich dieses Snippet mehrmals ausgeführt habe?
Sie können eine Schutzvariable wie 'window.pushStateEventCaptured' verwenden und ihren Wert überprüfen, bevor Sie einen Ereignislistener hinzufügen. – Phylogenesis
AFAIK gibt es keine native JS Weise, Listener auf dem gegebenen DOM Element abzurufen (was elegantere Lösung wäre). Wenn Sie das gesagt haben, was verhindert, dass Sie 'if (! Window.isHistoryApplied) ausführen (function (history) {window.isHistoryApplied = true'? – eithed
Haben Sie dies überprüft, weil [irgendwelche ** exakten ** Duplikate verworfen werden sollten] (http : //stackoverflow.com/a/28607536/542251) – Liam