L'unico modo per farlo davvero (ed è così che la 'realsemplice storia' lo fa), è impostare un intervallo che continui a controllare l'hash corrente e confrontarlo con quello che era prima, lo facciamo e permettiamo agli abbonati di iscriversi a un cambiamento l'evento che generiamo se l'hash cambia ... non è perfetto ma i browser non supportano questo evento in modo nativo.
Aggiorna per mantenere fresca questa risposta:
Se stai usando jQuery (che oggi dovrebbe essere in qualche modo fondamentale per la maggior parte) allora una buona soluzione è usare l'astrazione che ti dà jQuery usando il suo sistema di eventi per ascoltare gli eventi di hashchange sull'oggetto finestra.
$(window).on('hashchange', function() {
//.. work ..
});
La cosa bella qui è che puoi scrivere codice che non deve nemmeno preoccuparsi del supporto di hashchange, tuttavia devi fare un po 'di magia, sotto forma di una funzione jQuery un po' meno nota eventi speciali jQuery .
Con questa funzione si ottiene essenzialmente l'esecuzione di un codice di installazione per qualsiasi evento, la prima volta che qualcuno tenta di utilizzare l'evento in qualsiasi modo (come l'associazione all'evento).
In questo codice di configurazione è possibile verificare il supporto del browser nativo e se il browser non lo implementa in modo nativo, è possibile impostare un singolo timer per eseguire il polling per le modifiche e attivare l'evento jQuery.
Questo libera completamente il codice dalla necessità di comprendere questo problema di supporto, l'implementazione di un evento speciale di questo tipo è banale (per ottenere una versione funzionante al 98%), ma perché farlo quando qualcun altro lo ha già fatto .