Ας πούμε ότι επρόκειτο να κάνετε μια συμπερίληψη σε μια ολόκληρη δέσμη σελίδων, και στο εσωτερικό της περιλαμβάνονται ότι θέλετε να κάνετε κάποια συγκεκριμένα πράγματα jQuery. Αυτή η σελίδα ενδέχεται να έχει ή δεν έχει ήδη φορτώσει το jQuery. Εάν το κάνει ήδη, δεν θέλετε να το φορτώσετε ξανά, αλλά αν όχι, το κάνετε. Αυτό λειτουργεί για αυτό.
Έξυπνος ασύγχρονος τρόπος
// Only do anything if jQuery isn't defined if (typeof jQuery == 'undefined') ( if (typeof $ == 'function') ( // warning, global var thisPageUsingOtherJSLibrary = true; ) function getScript(url, success) ( var script = document.createElement('script'); script.src = url; var head = document.getElementsByTagName('head')(0), done = false; // Attach handlers for all browsers script.onload = script.onreadystatechange = function() ( if (!done && (!this.readyState || this.readyState == 'loaded' || this.readyState == 'complete')) ( done = true; // callback function provided as param success(); script.onload = script.onreadystatechange = null; head.removeChild(script); ); ); head.appendChild(script); ); getScript('http://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js', function() ( if (typeof jQuery=='undefined') ( // Super failsafe - still somehow failed… ) else ( // jQuery loaded! Make sure to use .noConflict just in case fancyCode(); if (thisPageUsingOtherJSLibrary) ( // Run your jQuery Code ) else ( // Use .noConflict(), then run your jQuery Code ) ) )); ) else ( // jQuery was already loaded // Run your jQuery Code );
Παρατηρήστε πώς υπάρχουν πολλά μέρη ο κώδικας jQuery που σκοπεύετε να εκτελέσετε get's calling. Μην επαναλάβετε τον εαυτό σας εκεί, βάλτε το σε μια λειτουργία που μπορείτε να καλέσετε για να ξεκινήσετε τα πράγματα.
Αυτός ο κωδικός προσαρμόστηκε από εδώ.
Document.write τρόπος
Τα παιδιά ισχίου δεν χρησιμοποιούν το document.write, αλλά εάν είστε πολύ μεγάλοι για να νοιάσετε:
var jQueryScriptOutputted = false; function initJQuery() ( //if the jQuery object isn't available if (typeof(jQuery) == 'undefined') ( if (! jQueryScriptOutputted) ( //only output the script once… jQueryScriptOutputted = true; //output the script (load it from google api) document.write(""); ) setTimeout("initJQuery()", 50); ) else ( $(function() ( // do anything that needs to be done on document.ready // don't really need this dom ready thing if used in footer )); ) ) initJQuery();