Portanto, agora que o HTML5 se propõe history.pushStatea alterar o histórico dos navegadores, os sites começam a usá-lo em combinação com o Ajax, em vez de alterar o identificador de fragmento da URL.
Infelizmente, isso significa que essas chamadas não podem mais ser detectadas onhashchange.
Minha pergunta é: Existe uma maneira confiável (hack?;)) De detectar quando um site é usado history.pushState? A especificação não declara nada sobre eventos gerados (pelo menos, não consegui encontrar nada).
Tentei criar uma fachada e substituí-lo window.historypor meu próprio objeto JavaScript, mas não teve nenhum efeito.
Mais explicações: estou desenvolvendo um complemento do Firefox que precisa detectar essas alterações e agir de acordo.
Sei que havia uma pergunta semelhante, há alguns dias, que perguntava se a escuta de alguns eventos do DOM seria eficiente, mas prefiro não confiar nisso, porque esses eventos podem ser gerados por várias razões diferentes.
Atualizar:
Aqui está um jsfiddle (use o Firefox 4 ou Chrome 8) que mostra que onpopstatenão é acionado quando pushStateé chamado (ou estou fazendo algo errado? Fique à vontade para aprimorá-lo!).
Atualização 2:
Outro problema (lateral) é que window.locationnão é atualizado ao usar pushState(mas eu li sobre isso já aqui no SO, eu acho).
historyobjeto inteiro . Isso pode ser desnecessário neste caso.