2009-12-01 6 views
107

Est-ce que quelqu'un sait comment vérifier si jquery a été chargé (avec javascript) puis le charger s'il n'a pas été chargé.vérifier si jquery a été chargé, puis le charger si faux

quelque chose comme

if(!jQuery) { 
    //load jquery file 
} 
+6

Avant de faire cette fin du chargement de jQuery Assurez-vous de prendre note de ce rapport de bug: http://dev.jquery.com/ticket/4196 –

+1

merci pour les heads up! Espérons qu'il ne sera jamais appelé. juste essayer d'ajouter un peu de redondance – seventeen

+0

Merci pour l'astuce – Patriotec

Répondre

142

Peut-être quelque chose comme ceci:

<script> 
if(!window.jQuery) 
{ 
    var script = document.createElement('script'); 
    script.type = "text/javascript"; 
    script.src = "path/to/jQuery"; 
    document.getElementsByTagName('head')[0].appendChild(script); 
} 
</script> 
+5

Notez que cela suppose que le document a une «tête» qu'il peut ajouter un élément de script à –

+1

@DanielLeCheminant point positif sur cela. Et si c'était '(document.getElementsByTagName ('head') [0] || document.getElementsByTagName ('body') [0]) .appendChild (script);' – pppglowacki

+3

@Pawel J'ai vu des implémentations insérer l'élément avant/après le premier tag de script, puisque vous savez qu'il doit y en avoir un. –

103

Évitez d'utiliser "si (jQuery!)" Depuis IE renvoie l'erreur: jQuery est 'undefined'

Utilisez à la place: if (typeof jQuery == 'undefined')

<script type="text/javascript"> 
if (typeof jQuery == 'undefined') { 
    var script = document.createElement('script'); 
    script.type = "text/javascript"; 
    script.src = "http://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"; 
    document.getElementsByTagName('head')[0].appendChild(script); 
} 
</script> 

Vous devrez également vérifier si le JQuery a été chargé après l'avoir ajouté à l'en-tête. Sinon, vous devrez attendre l'événement window.onload, qui est plus lent si la page contient des images. Voici un exemple de script qui vérifie si le fichier JQuery est chargé, puisque vous n'aurez pas la commodité de pouvoir utiliser $ (document) .ready (fonction ...

http://neighborhood.org/core/sample/jquery/append-to-head.htm

+0

Qu'en est-il de 'script.onload = function() {alert ('jQuery loaded!'); } '? Cela fonctionnerait-il? – robsch

7

Essayez ceci:

<script> 
    window.jQuery || document.write('<script src="js/jquery.min.js"><\/script>') 
</script> 

ce vérifie si jQuery est disponible ou non, sinon il va ajouter une dynamique de chemin spécifié

Ref. Simulate an "include_once" for jQuery

OU

include_once équivalent pour js. Ref: https://raw.github.com/kvz/phpjs/master/functions/language/include_once.js

function include_once (filename) { 
    // http://kevin.vanzonneveld.net 
    // + original by: Legaev Andrey 
    // + improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net) 
    // + improved by: Michael White (http://getsprink.com) 
    // +  input by: Brett Zamir (http://brett-zamir.me) 
    // + bugfixed by: Kevin van Zonneveld (http://kevin.vanzonneveld.net) 
    // + bugfixed by: Brett Zamir (http://brett-zamir.me) 
    // - depends on: include 
    // %  note 1: Uses global: php_js to keep track of included files (though private static variable in namespaced version) 
    // *  example 1: include_once('http://www.phpjs.org/js/phpjs/_supporters/pj_test_supportfile_2.js'); 
    // *  returns 1: true 
    var cur_file = {}; 
    cur_file[this.window.location.href] = 1; 

    // BEGIN STATIC 
    try { // We can't try to access on window, since it might not exist in some environments, and if we use "this.window" 
    // we risk adding another copy if different window objects are associated with the namespaced object 
    php_js_shared; // Will be private static variable in namespaced version or global in non-namespaced 
    // version since we wish to share this across all instances 
    } catch (e) { 
    php_js_shared = {}; 
    } 
    // END STATIC 
    if (!php_js_shared.includes) { 
    php_js_shared.includes = cur_file; 
    } 
    if (!php_js_shared.includes[filename]) { 
    if (this.include(filename)) { 
     return true; 
    } 
    } else { 
    return true; 
    } 
    return false; 
} 
2

Même si vous avez une tête annexant peut ne pas fonctionner dans tous les navigateurs. C'était la seule méthode que j'ai trouvée pour fonctionner de manière cohérente.

<script type="text/javascript"> 
if (typeof jQuery == 'undefined') { 
    document.write('<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"><\/script>');   
    } 
</script> 
+2

Est-ce que 'document.write' * n'est pas * très mal vu? – Carcigenicate

11

Méthode 1:

if (window.jQuery) { 
    // jQuery is loaded 
} else { 
    // jQuery is not loaded 
} 

Méthode 2:

if (typeof jQuery == 'undefined') { 
    // jQuery is not loaded 
} else { 
    // jQuery is loaded 
} 

Si fichier jquery.js n'est pas chargé, on peut forcer la charge comme si:

if (!window.jQuery) { 
    var jq = document.createElement('script'); jq.type = 'text/javascript'; 
    // Path to jquery.js file, eg. Google hosted version 
    jq.src = '/path-to-your/jquery.min.js'; 
    document.getElementsByTagName('head')[0].appendChild(jq); 
} 
-1

J'utilise CDN pour mon projet et dans le cadre de la procédure de secours ing, j'utilisait le code ci-dessous,

<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script> 
    <script type="text/javascript"> 
       if ((typeof jQuery == 'undefined')) { 
        document.write(unescape("%3Cscript src='/Responsive/Scripts/jquery-1.9.1.min.js' type='text/javascript'%3E%3C/script%3E")); 
       } 
</script> 

Juste pour vérifier, j'ai supprimé la référence CDN et exécuter le code. Son cassé et il n'est jamais entré dans si boucle comme typeof jQuery vient comme la fonction au lieu d'undefined.

Ceci est dû à la version plus ancienne mise en cache de jquery 1.6.1 qui renvoient la fonction et cassent mon code parce que j'utilise jquery 1.9.1.Comme je l'ai besoin de la version exacte de jquery, i modifié le code comme ci-dessous,

<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script> 
<script type="text/javascript"> 
      if ((typeof jQuery == 'undefined') || (jQuery.fn.jquery != "1.9.1")) { 
       document.write(unescape("%3Cscript src='/Responsive/Scripts/jquery-1.9.1.min.js' type='text/javascript'%3E%3C/script%3E")); 
      } 
</script> 
0
var f =()=>{ 
    if (!window.jQuery) { 
     var e = document.createElement('script'); 
     e.src = "https://code.jquery.com/jquery-3.2.1.min.js"; 
     e.onload = function() { 
      jQuery.noConflict(); 
      console.log('jQuery ' + jQuery.fn.jquery + ' injected.'); 
     }; 
     document.head.appendChild(e); 
    } else { 
     console.log('jQuery ' + jQuery.fn.jquery + ''); 
    } 
}; 
f(); 
+0

vous devez ajouter un commentaire sur votre code pour l'expliquer. –

0

Vous pouvez vérifier si jQuery est chargé ou non par de nombreuses façons telles que:

if (typeof jQuery == 'undefined') { 

    // jQuery IS NOT loaded, do stuff here. 

} 


if (typeof jQuery == 'function') 
//or 
if (typeof $== 'function') 


if (jQuery) { 
    // This will throw an error in STRICT MODE if jQuery is not loaded, so don't use if using strict mode 
    alert("jquery is loaded"); 
} else { 
    alert("Not loaded"); 
} 


if('jQuery' in window) { 
    // Do Stuff 
} 

Maintenant, après avoir vérifié si jQuery est pas chargé, vous pouvez charger jQuery comme ceci:

Although this part has been answered by many in this post but still answering for the sake of completeness of the code


// This part should be inside your IF condition when you do not find jQuery loaded 
    var script = document.createElement('script'); 
    script.type = "text/javascript"; 
    script.src = "http://code.jquery.com/jquery-3.3.1.min.js"; 
    document.getElementsByTagName('head')[0].appendChild(script); 
Questions connexes