C'è qualche evento a cui posso iscrivermi quando lo stato della cronologia viene modificato? Come?Come rilevare quando vengono utilizzati history.pushState e history.replaceState?
risposta
L'evento onpopstate dovrebbe essere licenziato quando cambia la storia, è possibile associare ad esso nel codice come questo:
window.onpopstate = function (event) {
// do stuff here
}
Questo evento può anche essere licenziato al caricamento della pagina, è possibile determinare se l'evento è stato sparato da un caricamento della pagina, oppure utilizzando pushState/replaceState controllando l'oggetto evento per una proprietà dello stato, sarà indefinito se l'evento è stato causato da un caricamento della pagina
window.onpopstate = function (event) {
if (event.state) {
// history changed because of pushState/replaceState
} else {
// history changed because of a page load
}
}
attualmente v'è nessun caso onpushstate purtroppo , per aggirare questo è necessario avvolgere entrambi i metodi pushState e replaceState per implementare il proprio evento onpushstate.
Ho una libreria che rende un po 'più semplice il lavoro con pushState, potrebbe valere la pena di verificarlo chiamato Davis.js, fornisce una semplice API per lavorare con il routing basato su pushState.
ho usato per usare questo per essere avvisato di quando pushState
e replaceState
sono chiamati:
// Add this:
var _wr = function(type) {
var orig = history[type];
return function() {
var rv = orig.apply(this, arguments);
var e = new Event(type);
e.arguments = arguments;
window.dispatchEvent(e);
return rv;
};
};
history.pushState = _wr('pushState'), history.replaceState = _wr('replaceState');
// Use it like this:
window.addEventListener('replaceState', function(e) {
console.warn('THEY DID IT AGAIN!');
});
Di solito è eccessivo, però. E potrebbe non funzionare in tutti i browser. (Mi interessa solo la mia versione del mio browser.)
NB. Inoltre non funziona negli script di contenuto di estensioni di Google Chrome, perché non è consentito modificare l'ambiente JS del sito. Puoi ovviare a ciò inserendo un codice <script>
con detto codice, ma questo è ancora più eccessivo.
- 1. Quando vengono utilizzati IsRoot, IsAbstract e IsLeaf in UML?
- 2. Dove vengono memorizzate le immagini e i contenitori di ancoraggio quando vengono utilizzati con Windows?
- 3. Cosa sono i moduli di unione e come vengono utilizzati?
- 4. Come vengono utilizzati i margini e il riempimento in FireMonkey?
- 5. Come e quando vengono utilizzati gli indici nelle operazioni INSERT e UPDATE?
- 6. Come vengono utilizzati MPI_Scatter e MPI_Gather da C?
- 7. Spiega la sincronizzazione delle raccolte quando vengono utilizzati gli iteratori?
- 8. Does WebDriverWait sovrascrive ImplicitlyWait quando vengono utilizzati entrambi?
- 9. Come eliminare le voci della cronologia aggiunte tramite history.pushstate?
- 10. Come disabilitare il conteggio quando Specification e Pageable vengono utilizzati insieme?
- 11. Per cosa vengono utilizzati Apache Thrift e Google Protocol Buffers?
- 12. Determinare se vengono utilizzati gli assembly di GAC e NGen
- 13. Come funzionano le sessioni PHP? (non "come vengono utilizzati?")
- 14. Perché qui vengono utilizzati i lucchetti?
- 15. Perché vengono utilizzati i campi nascosti?
- 16. history.pushstate e HTTP POST repost modulo
- 17. Quali pacchetti cabala non vengono utilizzati
- 18. JavaScript da rilevare quando i javascript esterni vengono caricati
- 19. Come posso rilevare quando vengono aperte nuove finestre e/o ottenere un elenco di finestre aperte?
- 20. monitoraggio history.pushstate da un'estensione cromata
- 21. Come trovare i passi Cucumber che non vengono utilizzati
- 22. Come vengono utilizzati i DVCS in team di grandi dimensioni?
- 23. Intellij contrassegna tutti i metodi come non utilizzati anche se vengono utilizzati
- 24. Come rilevare quando termina l'applicazione?
- 25. Come determinare quali database vengono utilizzati su SQL Server 2000
- 26. Come vengono utilizzati i mapping dell'URL servlet in web.xml?
- 27. Come vengono utilizzati i pattern vettoriali nelle regole della sintassi?
- 28. Come reindirizzare [Autorizza] per loginUrl solo quando i ruoli non vengono utilizzati?
- 29. Come vengono utilizzati gli indici delle tabelle quando si utilizza una vista?
- 30. Come individuare metodi e #import non utilizzati in Objective-C
Sembra che event.state possa ancora essere impostato sul caricamento della pagina (Chrome). – GolezTrol
Mozilla/Firefox non emette un evento onpopstate al caricamento della pagina, ma Safari/Chrome fa – tom
Nel mio caso, questo evento si verifica dopo il successo di una chiamata Ajax. Forse a causa di ciò, non sono in grado di rilevare l'evento per la prima volta. Se faccio clic sul pulsante Indietro/Avanti, allora funziona bene, tuttavia non mi aspetto che il mio utente faccia clic sui pulsanti della cronologia. –