Je veux recharger toutes les feuilles de style CSS dans une page HTML via JavaScript, sans recharger la page.
Je n’ai besoin de cela que lorsque je développe pour refléter les modifications CSS sans actualiser la page à tout moment.
Une solution possible consiste à ajouter un suffixe ?id=randomnumber
au hrefs CSS avec JavaScript, mais je ne veux pas le faire.
Je veux recharger la feuille de style d'une certaine manière, sans changer son URL, et le navigateur décidera s'il doit charger une nouvelle version de ce css ou non (si le serveur répond avec un 304 - Not modified
).
Comment accomplir ceci?
En clair Javascript:
var links = document.getElementsByTagName("link");
for (var x in links) {
var link = links[x];
if (link.getAttribute("type").indexOf("css") > -1) {
link.href = link.href + "?id=" + new Date().getMilliseconds();
}
}
Dans jQuery:
$("link").each(function() {
if $(this).attr("type").indexOf("css") > -1) {
$(this).attr("href", $(this).attr("href") + "?id=" + new Date().getMilliseconds());
}
});
Assurez-vous de charger cette fonction après le chargement de l'arborescence DOM.
Il y a beaucoup mieux _ manières d'accomplir:
Je n’ai besoin de cela que lorsque je développe pour refléter les modifications CSS sans actualiser la page à tout moment.
Une solution consiste à utiliser Grunt.js to watch pour les modifications de fichier, puis livereload la page.
Le flux de travail est comme ça:
Cela peut être associé à d'autres fonctions Grunt, telles que la compilation du préprocesseur {sass | less | stylus}, pour créer un flux de travail comme celui-ci:
Autres ressources d'automatisation frontale:
Vidéo d'un employé de Google: http://www.youtube.com/watch?v=bntNYzCrzvE
Commencez par ajouter un identifiant (s'il n'est pas présent) aux balises de lien de votre feuille de style, comme suit:
<link id="mainStyle" rel="stylesheet" href="style.css" />
Ensuite, en Javascript (utilisant également jQuery), ajoutez la fonction suivante:
function freshStyle(stylesheet){
$('#mainStyle').attr('href',stylesheet);
}
Enfin, déclenchez la fonction sur l’événement souhaité:
$('#logo').click(function(event){
event.preventDefault();
var restyled = 'style.css';
freshStyle(restyled);
});
En mettant à jour la valeur de la feuille de style liée, même si c'est la même valeur, vous obligez le client à regarder à nouveau; le cas échéant, il verra et (re) chargera le dernier fichier.
Si vous rencontrez des problèmes avec le cache, essayez d’ajouter un numéro de version aléatoire (psuedo) à votre nom de fichier, comme ceci:
var restyled = 'style.css?v='+Math.random(0,10000);
J'espère que cela t'aides. Les exemples ci-dessus de Dillen fonctionnent également, mais vous pouvez l'utiliser si vous souhaitez uniquement cibler une ou plusieurs feuilles de style avec des ajustements mineurs.
C'est très simple dans le navigateur GoogleChrome.
Appuyez sur F12, cliquez sur la roue dentée située dans le coin inférieur droit et sélectionnez l'option Désactiver le cache (lorsque DevTools est ouvert).
Une alternative à Grunt serait d'utiliser Prepros .
Il utilise également un observateur de fichiers sur votre dossier de projet, mais pour tous vos fichiers. (js, css, php) et rechargez la page à chaque changement. (+ S'il s'agit d'un petit changement visuel comme css, il n'actualisera pas la page, la transition se fera en douceur. (Fonctionne pour les couleurs, le positionnement, etc.))
Comme Grunt, il compile et réduit vos fichiers, et vous permet de faire un aperçu en direct sur une URL spécifiée (pas seulement localhost). ((Il y a beaucoup plus de fonctionnalités)} _
En utilisant un port spécial, il peut même synchroniser des événementstels que clic, molette de la souris, entrées, etc.