Problemas com o cache de página no iOS 5 Safari ao navegar pelo evento de retorno / descarregamento não acionado
tl; dr - O Safari no iOS 5 está fazendo um cache tão difícil que está quebrando meu sit
Estou tendo problemas com a maneira como o navegador Safari no iOS 5 lida com o cache de retrocesso, que eles chamam de "cache de página". A maneira como é descritoaqu explica o comportamento muito bem.
Simplesmente, o cache de página o faz quando, quando você sai de uma página, “pausamos” e quando você volta, pressionamos “play”
Isto está causando problemas em todo o meu site. Ao usar o botão Voltar, a maioria dos outros navegadores mostra a página no estado em que foi carregada. Não é o Safari no iOS 5, ele mostra a página como você a deixou pela última vez. Um exemplo simples seria a desativação de um botão de envio. Se eu usar o Javascript para desativar um botão de envio, envie um formulário. Quando você clicar novamente, o botão de envio ainda estará desativado. Esse foi um problema em outros navegadores, incluindo a versão para desktop do Safari, mas é resolvido configurando o manipulador de eventos onload para uma função em branco. Eu acredito que isso diz ao navegador para invalidar o cache, porque algo importante poderia ter acontecido nessa função. Esse hack parece não funcionar no Safari no iOS 5.
Abaixo é o problema resumido ao essencial. Ao carregar o test.html, você verá o texto "Texto original". Quando você clica no link, esse texto muda para "Texto alterado - encaminhamento para a próxima página" e, em 3 segundos, você será encaminhado para test2.html. Tudo está bom até este ponto em todos os navegadores. Em todos os outros navegadores, quando você clica no botão Voltar, o texto que você vê é "Texto original", mas no Safari para iOS 5 você vê "Texto alterado - encaminhando para a página seguinte".
Alguma sugestão sobre como lidar com isso?
Este é um exemplo simples
test.html
<script>
function changeText() {
el = document.getElementById("text");
el.innerHTML = "Changed text - forwarding to next page";
setTimeout("forward()",3000);
}
function forward() {
document.location.href = "test2.html";
}
</script>
<div id="text">Original Text</div>
<a href="Javascript:changeText()">Click Here</a>
<script>
window.onunload = function(){};
</script>
test2.html
<div>Click back button</div>
Este é um segundo exemplo usando uma postagem de formulário. Este é um exemplo simples de como meu aplicativo está funcionando. Quando você voltar para formtest2.asp, deverá ver o valor do formulário postado e o texto div deve ser origina
formtest.asp
<form method="post" action="formtest2.asp">
Test: <input type="text" name="test"/>
<input type="submit" value="Submit"/>
</form>
formtest2.asp
<script>
function changeText() {
el = document.getElementById("text");
el.innerHTML = "Changed text - forwarding to next page";
setTimeout("forward()",3000);
}
function forward() {
document.location.href = "test2.html";
}
</script>
<%
Dim test
test = Request("test")
Response.Write("Test value: " & test & "<br />")
%>
<div id="text">Original Text</div>
<a href="Javascript:changeText()">Click Here</a>
<script>
window.onunload = function(){};
</script>
test2.html
<div>Click back button</div>