Evitar a rolagem do navegador no histórico pop-up do HTML5

É possível evitar o comportamento padrão de rolar o documento quando ocorre um evento popstate?

Nosso site usa rolagem animada do jQuery e History.js, e mudanças de estado devem rolar o usuário para diferentes áreas da página, seja por pushstate ou popstate. O problema é que o navegador restaura automaticamente a posição de rolagem do estado anterior quando ocorre um evento popstate.

Eu tentei usar um conjunto de elementos de contêiner para 100% de largura e altura do documento e rolar o conteúdo dentro desse contêiner. O problema com o que eu encontrei é que não parece ser tão bom quanto a rolagem do documento; especialmente se usar muitos css3 como sombras e gradientes de caixa.

Eu também tentei armazenar a posição de rolagem do documento durante uma rolagem iniciada pelo usuário e restaurá-lo depois que o navegador rola a página (no popstate). Isso funciona bem no Firefox 12, mas no Chrome 19 há um tremor devido à página sendo rolada e restaurada. Suponho que isso tenha a ver com um atraso entre o deslocamento e o evento de rolagem que está sendo disparado (onde a posição de rolagem é restaurada).

O Firefox rola a página (e dispara o evento de rolagem) antes que o popstate seja acionado, e o Chrome dispara primeiro o popstate, em seguida, rola o documento.

Todos os sites que vi que usam a API de histórico usam uma solução semelhante àquelas acima ou simplesmente ignoram a alteração da posição de rolagem quando um usuário volta ou encaminha (por exemplo, GitHub).

É possível evitar que o documento seja rolado em todos os eventos popstate?

questionAnswers(11)

yourAnswerToTheQuestion