Newsgroup: it.comp.lang.javascript
Titolo: Quesito (semplice?) sulle cache dei browsers

Se uso:
  <META HTTP-EQUIV="Pragma" CONTENT="no-cache">
  <META HTTP-EQUIV="Expires" CONTENT="-1">
...nell'intestazione del mio "container" html...
elemento HEAD che contiene anche una serie di:
   <script type="text/javascript" src="cruscotto.js"></script>
   <script type="text/javascript" src="mantainer.js"></script>
   <script type="text/javascript" src="vbox.js"></script>
... che compongono l'applicazione vera e propria.
Il browser evitera` di mettere in cache anche i javascript o devo 
escorgitare qualcosa di diverso per fare in modo di essere sicuro che al 
deploy di una mia nuova versione l'applicazione venga aggiornata senza 
dover fare refresh nel browser?
Speravo di si, ma le prove che ho effettuato con IE6 mi hanno subito 
contraddetto....
Quindi, se io volessi, che oltre all'html, ad ogni accesso alla mia 
pagina, il browser forzasse il caricamento degli script, come posso fare?
Come viene risolto in genere questo problema? Suppongo che google non 
forzi gli utenti a fare un "reload" della pagina quando mette la nuova 
versione di gmail :)

 contraddetto....
anche a me ... :-/
se hai a disposizione un linguaggio server-side prova a metterci un 
prefisso random, magari legato al timestamp (es. tuofile.js?
2432359849589345493543).
Con le immagini funziona, mai provato con file .js ma a naso ...

 dover fare refresh nel browser?
Prima di tutto, la cache va usata. Non evitata. � un ottimo modo per
velocizzare le applicazioni. Il problema � che IE ha qualche piccolo
problema ha capire quando un elemento � stato modificato - e quindi,
andrebbe richiesto nuovamente al server e non preso dalla cache.
Lavorando lato server, dovresti essere in grado di imporre il giusto
comportamento anche a IE (ma non ti ci metto la mano sul fuoco, dato
che non posso provare, puoi forzare a non cachare i file ovviamente,
ma questo non � "usare la cache").
Alternativamente, se per la tua applicazione gi� usi XMLHttpRequest,
puoi utilizzarlo per "correggere" lato client - senza quindi mettere
mano al server - il comportamento di IE con la cache; sfruttando tal
oggetto per richiedere gli script al posto dei classici tag HTML; ma
solo se sono effettivamente stati modificati rispetto alla cache.
Oppure, molto semplicemente, sfruttare questo semplice approccio:
<script type="text/javascript" src="cruscotto.js?ver=1.0.0"></script>
<script type="text/javascript" src="mantainer.js?ver=1.0.617"></script>
<script type="text/javascript" src="vbox.js?ver=1.1.0"></script>
Dove ovviamente hai un "major.minor.build". In questo modo, a parit�
di versione e build, qualunque browser sfrutter� il file cachato, se
la versione/build verr� modificata, prender� il file aggiornato.
Se eventualmente hai un sistema di versioning potresti utilizzare al
posto del "major.minor.build" il numero di revisione.
Lo svantaggio � che devi modificare il codice HTML che include anche
i suddetti file, ovviamente.
Ma a realizzare una banale utility che faccia per te questo "sporco"
lavoro ci metti davvero poco (e che ti prende il revision da s�, nel
caso tu abbia un sistema di versioning appunto).
-- 
"When you have eliminated the impossible, whatever remains, however
improbable, must be the truth."

 pagina, il browser forzasse il caricamento degli script, come posso fare?
Io (nel caso di applicazioni web) nel dubbio appendo ai js e css una
stringa contente data e al massimo un 1/0 per dire se è mattino o sera
pippo.js?time=20090622
così sono sicuro che almeno ogni 24 ore i javascript e (sopratutto) i
CSS sono aggiornati.