1

Je travaille sur un chargeur google maps (en utilisant l'API google maps javascript). Je veux ajouter dynamiquement des points à un chemin au fur et à mesure qu'ils sont disponibles. Modifier: La page Web et le javascript sont stockés et chargés localement et non via un serveur Web. À cette fin, j'ai créé un fichier javascript externe dans lequel je mets les données que je veux utiliser.Imposer un javascript chargé dynamiquement pour ne pas mettre en cache sur google chrome

je charge l'objet java script en utilisant un truc que je trouve nulle part ailleurs sur stackoverflow:

function loadjsfile(filename, callback) 
{ 
    var fileref = document.createElement('script'); 
    fileref.setAttribute("type", "text/javascript"); 
    fileref.setAttribute("src", filename); 

    var done = false; 
    fileref.onload = fileref.onreadystatechange = function() 
    { 
     if(!done && (!this.readyState 
           || this.readyState == "loaded" 
           || this.readyState == "complete")) 
     { 
       done = true; 

       // Continue your code 
       callback(); 

       // Handle memory leak in IE 
       fileref.onload = fileref.onreadystatechange = null; 
       document.getElementsByTagName("script")[0].removeChild(fileref); 
     } 
    }; 
    document.getElementsByTagName("script")[0].appendChild(fileref); 
} 

Cela fonctionne parfaitement comme il attend que le javascript externe a effectivement chargé avant de procéder à l'intialisation.

Donc, c'est génial, ça se charge très bien. Je définis ensuite un délai de 5 secondes qui recharge le fichier javascript externe. C'est là que j'ai un problème. Google Chrome est en train de recharger le fichier javascript externe à partir du cache au lieu d'aller directement sur le disque. C'est une énorme douleur car cela signifie que mon chemin de carte ne se met pas à jour au fur et à mesure. J'en ai vraiment besoin.

Lorsque j'ai rafraîchi toute la page, il était correct de recharger le javascript mais le scintillement était très ennuyeux (et il a forcé la carte à revenir à l'état "initial"). Cette nouvelle méthode fonctionnerait parfaitement à condition que je puisse le forcer à recharger le fichier javascript à chaque fois.

Donc, quelqu'un peut-il m'aider?

Je suis très nouveau Javascript (je suis principalement un codeur C++) donc des excuses si je demande quelque chose de stupide: D

Répondre

2

Si personne d'autre n'a d'autres idées, essayez d'ajouter un nombre aléatoire comme chaîne de requête au nom de fichier. Cela indiquera au script que le fichier est nouveau et devrait forcer un rechargement.

Génère fondamentalement un nombre aléatoire à chaque fois.

var rnd = Math.floor(Math.random()*80000); 

donc votre code ressemblerait à quelque chose comme

function loadjsfile(filename, callback) 
{ 
    var rnd = Math.floor(Math.random()*80000); 
    var fileref = document.createElement('script'); 
    fileref.setAttribute("type", "text/javascript"); 
    fileref.setAttribute("src", filename + "?r=" + rnd); // note this line 

    // other code... 
} 
+0

Sweet qui semble fonctionner. Pouvez-vous expliquer pourquoi cela fonctionne bien?Si je comprends bien, il envoie une requête au javascript mais je ne comprends pas pourquoi cela forcerait un rechargement. – Goz

+0

Parce que le navigateur pense qu'il s'agit d'un fichier différent, c'est-à-dire une page générée dynamiquement en raison de la modification de l'URL. Je ne suis pas sûr si le navigateur essayera et mettra en cache chaque *** random * url **, mais cela pourrait valoir un test avec un échantillon plus petit. – Marko

+0

Ok, je pense que je comprends. En tant que requête envoyée au navigateur, le navigateur n'a aucune idée de ce que le serveur retournera exactement. Par conséquent, il ne peut pas éventuellement utiliser une version mise en cache car la requête peut renvoyer quelque chose de complètement différent. La chaîne de requête est simplement ignorer cependant parce que ce que le navigateur Web ne sait pas, c'est que je ne fais rien de si compliqué. Est-ce correct? – Goz

0

Vous pourriez (si votre fichier est hébergé sur un serveur web apache) ajouter une Fichier .htaccess dans le répertoire, contenant votre fichier de script avec le contenu:

Header set Cache-Control "no-cache" 

Cela empêchera le fichier d'être mis en cache.

Il existe également d'autres moyens d'envoyer ces informations d'en-tête.

+0

Désolé je l'ai dit que cela se fait dans un magasin local. J'ai mis à jour ma question. – Goz

+0

Si vous faites du développement local avec google chrome, désactivez le cache lorsque vous êtes en développement. Pour ce faire: Appeler les outils de développement (ctrl + shift + i) Cliquez sur les paramètres cog en bas à droite. Onglet Général. Désactiver le cache. –