ho usato (https://github.com/browserstate/history.js) e hanno un pezzo di codice come questodel browser avanti e indietro non richiamare il metodo di callback con evento stateChange di history.js
History.Adapter.bind(window, 'statechange', function() {
var State = History.getState();
alert('Inside History.Adapter.bind: ' + State.data.myData);
});
function manageHistory(url, data, uniqueId){
var History = window.History;
if (!History.enabled) { return false; }
History.replaceState({myData: data}, null, '?stateHistory=' + uniqueId);
}
se invoco manageHistory()
dopo la mia chiamata AJAX, quindi Il metodo di callback History.Adapter.bind
viene richiamato correttamente. Tuttavia, se faccio clic sul browser indietro e poi sul pulsante di avanzamento, il risultato di spostamento della pagina da B a A è , quindi A torna a B, il metodo di richiamata all'interno di History.Adapter.bind
non viene richiamato. Questo succede sia su Chrome che su IE9. Qualcuno sa come risolvere questo problema, ho bisogno di ottenere il State
dopo aver fatto clic sul browser indietro e poi in avanti, per aggiornare il mio DOM. Si prega di aiutare
Nota: io uso la versione 1.7.1 jquery.history.js per il browser HTML4 IE9
UPDATE (3 maggio 2013): parlare un po 'di più sulla mia esigenza
Spiacente Ero impegnato con altri compiti, che non fino ad ora ho a volte a guardare questo problema. Quindi, oncomplete
di una chiamata Ajax, ho preso quell'informazione che ritorna da me e la spingo nello stato. Il mio requisito è: che se navigo dalla pagina A alla pagina B, e poi alla pagina B, eseguo numeri di richieste ajax che risultano nella manipolazione DOM (chiamiamo ogni richiesta ajax che risulta nella manipolazione DOM a state
). Se faccio clic sul pulsante Indietro, dovrei tornare alla pagina A, e se clicco sul pulsante avanti, dovrei andare alla pagina B con l'ultimo stato in cui mi trovavo.
Quindi il mio pensiero era, oncomplete
del mio richiesta Ajax, vorrei sostituire l'ultimo stato nella storia con il mio stato attuale (il mio oggetto json è l'html che ricevo indietro dalla richiesta Ajax). Se utilizzo lo stato push, diciamo che sono nella pagina B e faccio clic su un pulsante, la mia pagina ora cambia in aaa
, I pushState aaa
. Quindi se faccio clic su un altro pulsante, la mia pagina ora cambia in bbb
, I pushState bbb
. Se faccio clic sul pulsante Indietro ora, sarei ancora sulla pagina B, con il mio stato in History.Adapter.bind(window, 'statechange', function() {})
visualizzato come aaa
, se faccio di nuovo clic su pulsante, vorrei andare alla pagina A. Non voglio questo comportamento. Voglio che se io sono sulla pagina B con stato bbb
, e fare clic indietro, vorrei andare alla pagina A, e se faccio clic avanti, vorrei andare alla pagina B con stato bbb
. Spero che questo abbia più senso. Please help
Re: l'aggiornamento - penso che non si desidera utilizzare la storia per tracciare "i cambiamenti di stato" all'interno pagina B/A. utilizza la cronologia solo in combinazione con una modifica del tuo URL. Qualsiasi stato cambia all'interno di un singolo url (cioè A vs B) dovrebbe salvare lo stato da un altro meccanismo (non da history.replaceState(); ... Questo è molto facile da fare con una libreria MV * come Backbone o Angular. – 1nfiniti
Check out jquery-mobile, hanno un modo ajaxy di gestire le pagine che potresti trovare utili: http://jquerymobile.com/ – euxneks