Comment les secours locaux de la feuille de style (pas de script) si CA échoue
Je suis un lien vers jQuery Mobile de la feuille de style sur un CDN et voudrais revenir à ma version locale de la feuille de style si CA tombe en panne. Pour les scripts, la solution est bien connue:
<!-- Load jQuery and jQuery mobile with fall back to local server -->
<script src="http://code.jquery.com/jquery-1.6.3.min.js"></script>
<script type="text/javascript">
if (typeof jQuery == 'undefined') {
document.write(unescape("%3Cscript src='jquery-1.6.3.min.js'%3E"));
}
</script>
Je voudrais faire quelque chose de similaire pour une feuille de style:
<link rel="stylesheet" href="http://code.jquery.com/mobile/1.0b3/jquery.mobile-1.0b3.min.css" />
Je ne suis pas sûr si une approche similaire peut être réalisé parce que je ne suis pas sûr que le navigateur bloque de la même façon lors de la liaison d'un script comme il le fait lors du chargement d'un script (peut-être qu'il est possible de charger une feuille de style dans une balise script et puis à l'injecter dans la page) ?
Donc ma question est: Comment dois-je faire une feuille de style est chargé localement si CA tombe en panne ?
- Je voudrais savoir si c'est possible... Si j'ai vraiment inquiétait à propos de la CAN de l'arrêt, je voudrais juste utiliser de l'hébergement local.
- Kendall, je pense que le droit énoncé est que son site sera plus que probablement à descendre que d'un CDN
- Meilleure façon: stackoverflow.com/questions/26192897/...
Vous devez vous connecter pour publier un commentaire.
Pas de croix-navigateur testé, mais je pense que cela va fonctionner. Devra être après vous charger jquery, sinon vous aurez à le réécrire dans la plaine du Javascript.
CSSStyleSheet
js objets qui viennent de bootstrapcdn.com tous les videsrules
etcssRules
champs dans mon navigateur (Chrome 31). SED: en fait, elle pourrait être une crossdomain problème, le fichier css dans la réponse aussi ne fonctionne pas pour moi.onerror
événement. stackoverflow.com/questions/30546795/....rules
/.cssRules
pour des feuilles de style externes. jsfiddle.net/E6yYN/13En supposant que vous utilisez le même CDN pour les css et jQuery, pourquoi ne pas simplement faire un test et attraper tous les??
document.write("<script type='text/javascript' src='path/to/file.js'>")
?<script>
à l'intérieur d'un JS chaîne et on a retrouvé à l'extérieur. C'est souvent pourquoi vous voyez aussi<\/script>
lors de l'écriture des balises pour le CDN de base.why not just do one test and catch it all?
-- Parce qu'il y a un million de raisons, que l'on peut échouer, et les autres à réussir.Je suppose que la question est de détecter si une feuille de style est chargé ou pas. Une approche possible est la suivante:
1) Ajouter une règle spéciale à la fin de votre fichier CSS, comme:
2) Ajouter le correspondant div en HTML:
3) Sur le document prêt, vérifiez si
#foo
est visible ou non. Si la feuille de style a été chargé, il ne sera pas visible.Démo ici -- charges de jquery-ui douceur thème; pas de règle est ajoutée à la feuille de style.
cet article propose quelques solutions pour le bootstrap css
http://eddmann.com/posts/providing-local-js-and-css-resources-for-cdn-fallbacks/
sinon cela fonctionne pour fontawesome
Vous pourrait être en mesure de tester l'existence de la feuille de style dans
document.styleSheets
.Test pour quelque chose de spécifique dans le fichier CSS que vous utilisez.
Voici une extension pour katy lavallee réponse. J'ai emballé le tout dans l'auto-exécution de la syntaxe de la fonction pour empêcher la variable collisions. J'ai aussi fait le script non-spécifiques à un seul lien. I. E., maintenant, toute feuille de style en lien avec les données "de secours" attribut url sera automatiquement analysée. Vous n'avez pas à coder l'url dans ce script comme avant. Notez que cela devrait être lancé à la fin de la
<head>
élément plutôt qu'à la fin de la<body>
élément, sinon il peut causer de la FOUC.http://jsfiddle.net/skibulk/jnfgyrLt/
.
document.styleSheets[i].ownerNode.dataset
vous pouvez accéder à<link data-* />
attributsVoulez-vous vraiment aller dans cette javascript route pour charger les CSS dans le cas d'un CDN échoue?
Je n'ai pas pensé à toutes les conséquences de performance à travers, mais vous allez perdre le contrôle lorsque le CSS est chargé et en général pour les performances de chargement des pages, CSS est la première chose que vous voulez télécharger après le HTML.
Pourquoi ne pas gérer cela au niveau des infrastructures - la carte de votre propre nom de domaine à la CAN, il donne une courte durée de vie, de surveiller les fichiers sur le CDN (par ex. à l'aide de Watchmouse ou autre chose), si CA échoue, modifier les DNS pour la sauvegarde du site.
D'autres options qui pourraient aider à "cache forever" sur le contenu statique, mais il n'ya aucune garantie que le navigateur va les garder, bien sûr, ou à l'aide de l'app-cache.
En réalité, comme quelqu'un l'a dit au dessus, si votre CA est fiable obtenir un nouveau
Andy
On pourrait utiliser
onerror
pour que:La
this.onerror=null;
est d'éviter la formation d'une boucle infinie dans le cas où le repli de soi n'est pas disponible. Mais il pourrait également être utilisé pour plusieurs issues.Cependant, actuellement, cela ne fonctionne dans Firefox et Chrome.
Regardez ces fonctions:
Et voici la vanille version JavaScript:
Maintenant la fonction réelle:
Assurez-vous juste AddLocalCss est appelé dans la tête.
Vous pouvez également envisager d'utiliser l'une des manières suivantes expliqué dans cette réponse:
De la charge à l'aide d'AJAX
Charge à l'aide de créé dynamiquement
ou
Je serais probablement utiliser quelque chose comme yepnope.js
Prises de le fichier readme.