web-dev-qa-db-fra.com

Comment forcer IE recharger javascript?

J'utilise IE 8 sur Vista et chaque fois que je modifie un fichier javascript puis que je commence le débogage, je dois appuyer sur Ctrl + F5 pour le faire recharger mon code javascript. Y at-il un moyen de le faire recharger automatiquement le javascript lorsque je commence le débogage, sans perdre les gains de performances obtenus simplement en naviguant sur le net?

Ouais ouais, je sais que vous n'aimez probablement pas IE, mais gardez à l'esprit que la question n'est pas "Quel est le meilleur navigateur?".

43
Max Schmeling

Ajoutez une chaîne à la fin de votre URL pour casser le cache. Je fais habituellement (avec PHP):

<script src="/my/js/file.js?<?=time()?>"></script>

Pour qu’elle soit rechargée à chaque fois pendant que je travaille dessus, puis l’enlève lorsqu’elle entre en production. En réalité, je résume cela un peu plus mais l’idée reste la même.

Si vous consultez la source de ce site Web, ils ajoutent le numéro de révision à la fin de l'URL de manière similaire pour nous imposer les modifications chaque fois qu'ils mettent à jour les fichiers javascript.

48
Paolo Bergantino

L’idée générale de Paolo (c’est-à-dire changer efficacement une partie de la requête uri) est votre meilleur choix. Cependant, je suggérerais d'utiliser une valeur plus statique, telle qu'un numéro de version, que vous mettez à jour lorsque vous avez modifié votre fichier de script, de manière à pouvoir toujours obtenir les gains de performances de la mise en cache.

Donc soit quelque chose comme ça:

<script src="/my/js/file.js?version=2.1.3" ></script>

ou peut-être

<script src="/my/js/file.2.1.3.js" ></script>

Je préfère la première option car cela signifie que vous pouvez conserver le fichier unique au lieu de le renommer constamment (ce qui, par exemple, conserve un historique de version cohérent dans votre contrôle de code source). Bien sûr, l’un ou l’autre (comme je l’ai décrit) impliquerait de mettre à jour vos instructions d’inclusion à chaque fois. Vous pouvez donc proposer une méthode dynamique, telle que le remplacement d’une valeur fixe par une valeur dynamique à chaque déploiement. (en utilisant Ant ou autre chose).

25
Alconja

Lorsque vous travaillez avec une page Web ou un fichier javascript, vous souhaitez le recharger à chaque fois que vous le modifiez. Vous pouvez modifier les paramètres dans IE 8 pour que le navigateur ne mette jamais en cache. 

Suivez ces étapes simples.

  1. Sélectionnez Outils-> Options Internet.
  2. Dans l'onglet Général, cliquez sur le bouton Paramètres dans la section Historique de navigation.
  3. Cliquez sur le bouton radio "Chaque fois que je visite la page Web".
  4. Cliquez sur le bouton OK.
16
Vadim

Si vous cherchez à le faire simplement sur VOTRE navigateur (a.k.a., sans imposer ceci à vos utilisateurs), je ne voudrais PAS configurer votre code pour ne pas utiliser le cache. Comme José l'a dit, il y a une perte de performance. 

Et je ne désactiverais pas complètement la mise en cache sur IE, car vous perdez ce gain de performance pour chaque site Web que vous visitez. Vous pouvez indiquer à IE de toujours actualiser à partir du serveur pour un site spécifique ou une session de navigation:

  1. Ouvrez IE Outils de développement
  2. Choisissez cache dans le menu
  3. Cochez "Toujours actualiser à partir du serveur"

Ou, pour les raccourcis clavier (comme moi) là-bas .. 

  • F12, Alt + C, Flèche Bas, Alt + R.

NOTE D'AVERTISSEMENT : Ceci dit ... Gardez à l'esprit que chaque fois que vous développez/testez d'une manière différente de celle affichée sur le site en production, vous courez le risque d'obtenir des résultats mitigés. Un bon exemple est ce problème de mise en cache. Nous avons trouvé un problème où IE mettait en cache nos appels Ajax et ne mettait pas à jour les résultats d'une méthode GET. Si nous avions désactivé la mise en cache dans IE, nous n'aurions jamais vu ce problème en développement et l'aurions déployé en production de la sorte.

5
coderob

En javascript, je pense que ce n'est pas possible, car les navigateurs modernes ont une politique de sécurité dans les javascripts .. et vider le cache est une violation grave.

Vous pouvez essayer d'ajouter 

<META HTTP-EQUIV="Pragma" CONTENT="no-cache">

Dans votre en-tête, mais vous aurez une perte de performance.

1
José Leal

Cela devrait faire l'affaire pour ASP.NET. Le concept est le même que celui présenté dans l'exemple PHP. Étant donné que l'URL est différente à chaque chargement du script, aucun navigateur de proxy ne doit mettre en cache le fichier . Je suis habitué à placer mon code JavaScript dans des fichiers distincts et j'ai perdu beaucoup de temps avec Visual Studio jusqu'à ce que je réalise que il ne rechargerait pas les fichiers JavaScript.

 <script src = "Scripts/main.js? version = <% = DateTime.Now.Ticks.ToString ()%>" type = "text/javascript"> </ script> 

Exemple complet:

 <% @ Page Title = "Page d'accueil" Language = "C #" MasterPageFile = "~/Site.master" AutoEventWireup = "true" 
 CodeBehind = "Default.aspx.cs" Inherits = "WebApplication1._Default"%> 

 <Asp: Content ID = "HeaderContent" runat = "serveur" ContentPlaceHolderID = "HeadContent"> .______. <script src = "Scripts/jquery-1.4.1-vsdoc.js" type = "text/javascript"> </ script> 
 <script src = "Scripts/main.js? version = <% = DateTime.Now.Ticks.ToString ()%>" type = "text/javascript"> </ script> 
 <script type = "text/javascript"> 

 $ (document) .ready (function () {
 myInit (); 
}); 

 </ script> 
 </ asp: Content> 

Bien évidemment, cette solution ne doit être utilisée que pendant la phase de développement et doit être supprimée avant la publication du site.

1
drpetermolnar

Pour éviter d'avoir à appuyer plusieurs fois sur F5 dans un onglet IE lors du développement d'un site Web, utilisez ReloadIt

enter image description here

Pour chaque page Web affichée dans IE, vous pouvez configurer un nom de fichier, un répertoire ou un ensemble d'entre eux. Si des modifications surviennent dans l'un des chemins d'accès configurés, ReloadIt actualise l'onglet IE. Un outil simple. Ça fonctionne. 

Cela rechargera tout, pas seulement le javascript.

0
Cheeso

Ajoutez une date de modification du fichier js à la fin de votre URL. Avec PHP, cela ressemblerait à ceci:

echo '<script type="text/javascript" src="js/something.js?' . filemtime('js/something.js') . '"></script>';

Lorsque votre script sera rechargé à chaque fois que vous le mettez à jour.

0
oO.

Si vous exécutez ASP.Net, consultez le module de regroupement et de minification disponible dans ASP.Net 4.5.

http://www.asp.net/mvc/tutorials/mvc-4/bundling-and-minification

Vous pouvez déclarer un "ensemble" qui pointe vers votre fichier javascript. Chaque fois que votre fichier est modifié, il génère un nouveau suffixe de chaîne de requête ... mais ne le fait que lorsque le fichier est modifié. Cela simplifie le déploiement des mises à jour, car vous n'avez même pas à penser à mettre à jour vos balises avec les nouveaux numéros de version.

Il peut également regrouper plusieurs fichiers .js dans un seul fichier et les réduire en une seule étape. Idem pour les css.

0
Rob Hudson