Ir para o conteúdo

Publicidade

 Estatísticas do Fórum

  • 0 Usuários ativos

    0 membro(s), 0 visitante(s) e 0 membros anônimo(s)

Cursos Online iMasters
Foto:

[Resolvido] Problema com cache no IE usando javascript

  • Por favor, faça o login para responder
6 respostas neste tópico

#1 Leonardo Rauta

Leonardo Rauta
  • Membros
  • 4 posts

Postado 09 janeiro 2012 - 09:23

Estou com um problema de cache na minha aplicação.

Minha aplicação é constituída por um html (index.html), o qual chama vários arquivos javascript para desenhar as janelas e fazer toda a parte lógica das janelas.

Ao iniciar a aplicação a janela faz uma requisição para um servidor fastCGI para verificar quais as opções de acesso que o usuário possui. Depois que o usuário selecionar determinada ação, a página envia outra requisição ao servidor e é recarregada para apresentar os novos menu ao usuário, no Firefox isso funciona corretamente. Porém, no IE a resposta do servidor é sempre a mesma (apenas para o IE), mas se eu limpar o cache a resposta é alterada.

Não é problema no servidor pois em outros navegadores funciona corretamente. Tudo leva a entender que o problema seja no armazenamento de cache feito pelo IE, inclusive por depois de limpar o cache, funcionar corretamente.

Existe algum modo de limpar o cache do IE? Utilizando alguma função javascript?

Já tentei utilizar as meta tags:

<META HTTP-EQUIV="Pragma" CONTENT="no-cache">
<META HTTP-EQUIV="Expires" CONTENT="-1">
<META HTTP-EQUIV="Cache-control" CONTENT="no-store">
Já tentei enviar sempre uma requisição ao servidor com um número aleatório ou com a data, para evitar o cache mas não foi bem sucedido, já fiz o servidor responder sempre a data, mas a data recebida pelo IE não era alterada. Outra opção que eu tinha era carregar as páginas com um parâmetro aleatório, também para evitar a página entrar em cache. Porém, todas as tentativas sem sucesso.

Alguém já passou por esse problema, sabe como resolver ou tem mais idéias para limpar o cache utilizando o javascript?
  • 0

#2 William Bruno

William Bruno

    Desenvolvedor FrontEnd

  • Moderadores Globais
  • 24.654 posts

Postado 09 janeiro 2012 - 09:33

Existe algum modo de limpar o cache do IE? Utilizando alguma função javascript?

não existe, isso é impossível.


Já tentei enviar sempre uma requisição ao servidor com um número aleatório ou com a data, para evitar o cache mas não foi bem sucedido, já fiz o servidor responder sempre a data, mas a data recebida pelo IE não era alterada. Outra opção que eu tinha era carregar as páginas com um parâmetro aleatório, também para evitar a página entrar em cache. Porém, todas as tentativas sem sucesso.

foram exatamente essas alternativas que imaginei.


limpar o cache utilizando o javascript?

isso é impossível. Temos que partir para outra solução.


A própria requisição em si pode estar entrando no cache.
Se fosse para um arquivo php, eu enviaria um header para evitar cache, assim:
<?php
	//Evitando cache de arquivo
	header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
	header('Last Modified: '. gmdate('D, d M Y H:i:s') .' GMT');
	header('Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0');
	header('Pragma: no-cache');
	header('Expires: 0');
existe algo parecido para você fazer no teu CGI ?
  • 0

#3 Leonardo Rauta

Leonardo Rauta
  • Membros
  • 4 posts

Postado 09 janeiro 2012 - 10:18

Para evitar que a própria requisição estivesse em cache eu implementei do lado do servidor e do cliente um token com a data e também com um número aleatório, sendo assim a requisição sempre seria atualizada, seria sempre uma requisição diferente.
Mas eu creio que a requisição esteja entrando em cache também pois mesmo com o token implementado a resposta (apenas no IE) era sempre a mesma, mesmo a 'pergunta' sendo diferente. Porém, apenas essa requisição apresenta esse comportamento, outras requisições feitas posteriores a essa não apresentam nenhum tipo de problema, principalmente problemas possivelmente ocasionado por cache.

O problema de utilizar um header php é que na aplicação não temos um servidor php.
  • 0

#4 William Bruno

William Bruno

    Desenvolvedor FrontEnd

  • Moderadores Globais
  • 24.654 posts

Postado 09 janeiro 2012 - 10:23

ok, mas então qual linguagem você está usando ?

veja se essa linguagem oferece headers semelhantes aos que sugeri.
  • 0

#5 Leonardo Rauta

Leonardo Rauta
  • Membros
  • 4 posts

Postado 09 janeiro 2012 - 11:14

William, meu servidor é todo em C e minhas páginas são todas em javascript (com ExtJS).
  • 0

#6 William Bruno

William Bruno

    Desenvolvedor FrontEnd

  • Moderadores Globais
  • 24.654 posts

Postado 09 janeiro 2012 - 11:56

Ok, então você deve enviar os headers para evitar cache, com a linguagem C.
  • 0

#7 Leonardo Rauta

Leonardo Rauta
  • Membros
  • 4 posts

Postado 09 janeiro 2012 - 13:33

Depois de muita procura encontrei uma solução.
Para quem tiver com um problema similar, encontrei o meu problema.
O problema estava nas requisições do tipo "GET", elas ficavam armazenadas em cache pelo IE. Para resolver isso foi utilizado as seguintes linhas de código:

var request = new XMLHttpRequest();
request.open("GET",pagina, false);
request.send(null);
if(!request.getResponseHeader("Date")) {
   var cached = request;
   request = new XMLHttpRequest();
   var ifModifiedSince =
     cached.getResponseHeader("Last-Modified") ||
     new Date(0); // January 1, 1970
   request.open("GET",pagina, false);
   request.setRequestHeader("If-Modified-Since", ifModifiedSince);
   request.send("");
   if(request.status == 304) {
     request = cached;
   }
}

Utilizando isso eu consegui limpar o cache a cada requisição feita ao servidor.
  • 0




Publicidade

/ins>