Arrêter de Javascript et HTML à partir de Chargement à Partir de la mémoire Cache
Je fais construire une page unique application javascript et lorsque l'application démarre, j'utilise un seul fichier javascript à charger tous les autres fichier que j'ai besoin à la volée. Quand j'ai cliquer sur "actualiser", selon firebug, ma page HTML ainsi que javascript, la page se charge avec un 304 not Modified Erreur et mon javascript ne fonctionne plus.
Je comprends que cela est dû à la mise en cache du navigateur, mais comment puis-je éviter cela? Je charge la première page HTML avec un seul appel de script
<script src="js/config.js" type="text/javascript"></script>
et puis continuer à charger le reste dynamiquement à partir de l'intérieur de ce script
window.onload = function () {
var scripts = ['http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.7.1.min.js', 'js/core.js', 'js/sandbox.js']; //Application scripts
var loaded = 0;
//Callback is executed after all scripts have been loaded.
var callback = function () {
if (loaded + 1 == scripts.length) {
//Create Modules
CORE.loader("js/modules/Login.js", function () {
CORE.createModule('loginForm', Login);
});
//Create HTML bindings.
CORE.createBinding('appContainer', '#Login', 'login.html');
CORE.bindHTML(window.location.hash); //Loads hash based page on startup
} else {
loaded++;
loadScript(scripts[loaded], callback);
}
};
loadScript(scripts[0], callback);
function loadScript(scriptSrc, callback) {
var script = document.createElement('script');
script.type = 'text/javascript';
script.async = true;
script.src = scripts[loaded];
if (script.readyState) {
script.onreadystatechange = function () {
if (script.readyState == 'loaded' || script.readyState == 'complete') {
script.onreadystatechange = null;
callback();
}
};
} else {
script.onload = function () {
callback();
};
}
document.getElementsByTagName('head')[0].appendChild(script);
}
};
Je sais que Gmail utilise des cookies afin de l'empêcher. Quelqu'un aurait-il une idée de comment prendre cette approche? Dois-je régler le cookie sur le serveur, puis vérifier avec JS sur chaque chargement de page/de rafraîchissement et d'utiliser quelque chose comme la fenêtre.emplacement.refresh() si le cookie me dit que la page est chargée dans le cache?
Je ne peux pas s'attendre à un utilisateur de l'application, à savoir de ne pas actualiser. C'est un bug qui doit être résolu, pas travaillé autour dans le navigateur.
304 Not Modified
n'est pas une erreur.Il ne devrait pas question que les fichiers JavaScript ne sont pas l'objet d'une nouvelle demande. Ils vont encore être chargé. Écoutez-vous à droite de l'événement pour réinitialiser votre page?
OriginalL'auteur ryandlf | 2012-03-29
Vous devez vous connecter pour publier un commentaire.
La mise en cache est important pour des raisons de performances. Je vous recommande de passer un numéro de version dans votre chaîne de requête et à chaque mise à jour, incrémenter le numéro de version. Cela va forcer le navigateur de renvoyer la demande et il va charger à partir du cache si il a déjà la même version.
OriginalL'auteur Ramesh
De s'étendre sur les @Ramesh réponse:
forcer un rechargement de la js fichiers, au lieu de la cache, utiliser ce code html:
La prochaine fois que vous apportez des modifications à ce fichier juste +1 le
v
. Cela fonctionne aussi avec les fichiers css.OriginalL'auteur Eonasdan
Je suis d'accord avec tous les autres réponses. 304 n'est pas une erreur et il y a beaucoup de raisons pour lesquelles ce comportement est correct.
Cela étant dit, il est un simple "hack" que vous pouvez utiliser. Il suffit de joindre une URL unique paramètre à la JS appel.
Encore une fois, c'est un hack. Performance sage, c'est horrible.
OriginalL'auteur Steve
Ajouter ceci dans votre code HTML TÊTE.
"304 not Modified" est tout simplement un "Vous devriez avoir cela en cache" la réponse, ce n'est pas une erreur.
OriginalL'auteur Boris Bachovski
Vous devez définir
script.src = scripts[loaded];
après l'ajout de laonreadystatechange
/onload
gestionnaires. Sinon, l'événement se passe à feu avant que les gestionnaires sont ajoutés, depuis la version mise en cache des charges instantanément.OriginalL'auteur user123444555621
Après avoir lutté avec le problème de cache pendant des mois, en essayant juste au sujet de quoi que ce soit (y compris un script qui modifie l'Url à l'aide d'un paramètre), j'ai trouvé un post qui explique comment le faire en utilisant les IIS.
C'est le post original, qui mentionne qu'il est pertinent de IIS 7.5 (sous Windows 7)
https://forums.iis.net/t/959070.aspx?How+ne+vous+désactiver+cache+en+IIS+
L'une des choses que j'ai essayé avant qui a été ajouter .html et .js dans le Cache de Sortie, et en cochant la case "Empêcher la mise en Cache". Donc, si ça ne fonctionne pas après la commande IISRESET, essayez de faire cela, si je ne suis pas sûr que c'est réellement nécessaire.
EDIT:
Si cela ne fonctionne pas, toujours dans le IIS aller en-Têtes de Réponse HTTP et ajouter de nouvelles actions:
Nom: cache-control, Valeur: no-cache
Nom: expire, Valeur: 0
OriginalL'auteur Oranit Dar
Je suggère d'utiliser le Javascript pour générer un nombre aléatoire à l'aide des Mathématiques.aléatoire multiplier et puis les Maths.plancher de retourner le nombre entier de. Ensuite, je voudrais ajouter ce numéro à l'URL en tant que variable. Depuis le numéro change à chaque chargement de la page, le fichier ne doit jamais être mis en cache.
OriginalL'auteur Nicolas Guérinet