Portanto, agora que o HTML5 se propõe history.pushState
a 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.history
por 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 onpopstate
não é acionado quando pushState
é chamado (ou estou fazendo algo errado? Fique à vontade para aprimorá-lo!).
Atualização 2:
Outro problema (lateral) é que window.location
não é atualizado ao usar pushState
(mas eu li sobre isso já aqui no SO, eu acho).
history
objeto inteiro . Isso pode ser desnecessário neste caso.