Ce que j'aime faire, c'est laisser tomber mon jquery.js local et avoir
Il a hébergé ailleurs. Mais si Google est en panne? Alors
Consultons une baisse qui utilise une autre source si jQuery
est "toujours" non chargé ... p>
J'ai fait ce cas de test mais il ne semble pas fonctionner, peut-être
Quelqu'un peut m'aider à sortir: p>
5 Réponses :
Si vous utilisez Firebug et voyez où JQuery est chargé, vous pouvez voir que Taht Google le chargé avec succès avec succès. Pourquoi cela ne semble pas fonctionner? Parce que les demandes sont asynchrones et que votre script fonctionne de manière synchrone, il exécute toutes les étapes avant que le premier script ne soit chargé. P>
SO: P>
etc etc. p>
Ce que vous devriez faire est de joindre à script exécute un éclair rapide par rapport à l'envoi d'une demande sur un serveur sur Internet et de récupérer les résultats pour le traitement. P>
Comme je l'ai lu, vous allez avoir des problèmes de détection 404 à l'aide de cette technique. La manière suggérée serait d'utiliser Ajax (XHR), puis de joindre un élément de script et d'ajouter du contenu reçu. Ce serait le moyen le plus fiable de le faire pour tous les navigateurs. P> surcharger code> événement de vos éléments de chargement de script et vérifiez que jQuery après avoir chargé. P>
Notes supplémentaires H2>
Donc, un paramétrage avant de vérifier si JQuery est chargé peut aider?
Le problème avec votre script est que vous n'attendez pas que le script se charge avant de tester si JQuery a été chargé. Utilisez quelque chose comme ça à la place:
function loadScript(src, callback) { var head=document.getElementsByTagName('head')[0]; var script= document.createElement('script'); script.type= 'text/javascript'; script.onreadystatechange = function () { if (this.readyState == 'complete' || this.readyState == 'loaded') { callback(); } } script.onload = callback; script.src = src; head.appendChild(script); } function isjQueryLoaded() { return (typeof jQuery !== 'undefined'); } function tryLoadChain() { var chain = arguments; if (!isjQueryLoaded()) { if (chain.length) { loadScript( chain[0], function() { tryLoadChain.apply(this, Array.prototype.slice.call(chain, 1)); } ); } else { alert('not loaded!'); } } else { alert('loaded!'); } } tryLoadChain( 'https://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js', 'http://ajax.microsoft.com/ajax/jQuery/jquery-1.4.4.min.js', 'mine.js');
MHHH - Je peux même supprimer les sources de TryDoadchain et votre script toujours alerte: chargé ... ne fonctionne pas pour moi
non ça ne le fait pas. Changez la première URL afin que vous obtiendrez un 404. Il va simplement arrêter d'exécuter. Au moins cela m'a fait pour moi.
Cela fonctionne assez bien (de HTML5 Boider ):
<!-- Grab Google CDN's jQuery. fall back to local if necessary --> <script src="//ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.js"></script> <script>!window.jQuery && document.write(unescape('%3Cscript src="js/libs/jquery-1.4.2.js"%3E%3C/script%3E'))</script>
C'est une cadeau! Merci beaucoup! C'est exactement ce que je cherchais!
Voici une solution JavaScript pure qui commence par détecter si JQuery est disponible. Sinon, il essaie la version CDN. Si cela n'est pas disponible, il essaie la version locale. Gère 404 erreurs. J'utilise cela dans une solution qui ne sait pas si le site Web a inclus JQuery.
<script> if (typeof jQuery === "undefined") { loadjQuery("//ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js", verifyJQueryCdnLoaded); } else main(); function verifyJQueryCdnLoaded() { if (typeof jQuery === "undefined") loadjQuery("script/jquery-1.6.1.js", main); else main(); } function loadjQuery(url, callback) { var script_tag = document.createElement('script'); script_tag.setAttribute("src", url) script_tag.onload = callback; // Run callback once jQuery has loaded script_tag.onreadystatechange = function () { // Same thing but for IE if (this.readyState == 'complete' || this.readyState == 'loaded') callback(); } script_tag.onerror = function() { loadjQuery("script/jquery-1.6.1.js", main); } document.getElementsByTagName("head")[0].appendChild(script_tag); } function main() { if (typeof jQuery === "undefined") alert("jQuery not loaded."); $(document).ready(function () { // Rest of your code here... }); } </script>
J'ai essayé d'utiliser quelque chose comme ça en écrivant un signet pour être utilisé avec Jira. Le test "type de jQuery ===" non défini "" a toujours échoué. Il s'est avéré que Jira utilisait des scripts qui utilisaient JQuery, comme Fancybox, qui a provoqué la définition de "jQuery" comme fonction, mais "$" n'a toujours pas été défini. J'ai changé le test dans la condition et JQuery serait chargé correctement.
Wow. Je n'ai jamais vu autant de code utilisé pour résoudre un problème aussi simple. Vous devez aimer taper ... :)
La réponse de Roger est ridicule. Ici, utilisez cela à la place, ses 2 lignes.
<script>window.jQuery || document.write('<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"><\/script>')</script> <script>window.jQuery || document.write('<script src="Content/Scripts/jquery-1.9.1.min.js"><\/script>')</script>
Il y a beaucoup de bonnes façons d'ajouter un nœud de script à la DOM. document.write code> n'est pas parmi eux.
@editor - soins à expliquer? Parce que presque toutes les réponses postées ici s'appuient sur Document.Write () et cela semble être le moyen standard de le faire.
Stackoverflow.com/ Questions / 802854 / ... En bref, car cela vous donne la possibilité d'écrire directement sur la page, il est très facilement maltraité, et s'il est malabusé, potentiellement un trou de sécurité. Il a été évité ici car il y a généralement des moyens plus agréables de faire la même chose. En tant que note latérale, pour un grand projet, examinez le chargement de style AMD, éventuellement avec quelque chose comme besoin.js.
@RobertChrist - Au fait, dans ce poste lui-même, il est dit que c'est l'une des utilisations légitimes du document.write ..
Pouvez-vous s'il vous plaît être un peu plus explicite avec ce que vous voulez faire?
Google étant down entraînerait l'implication Internet. Pas de soucis.
Un CDN tel que Google est très peu probable de descendre. Le codage autour d'un événement aussi improbable va probablement simplement polluer votre code :(