Řekněme, že se chystáte udělat zahrnutí na celou řadu stránek a uvnitř toho zahrnutí jste chtěli udělat nějaké věci specifické pro jQuery. Tato stránka může nebo nemusí mít již načten jQuery. Pokud ano, nechcete jej znovu načítat, ale pokud ne, uděláte to. To funguje.
Inteligentní asynchronní způsob
// 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 );
Všimněte si, jak existuje více míst, kde se volá kód jQuery, který chcete spustit. Neopakujte se tam, vložte to do funkce, kterou můžete zavolat, abyste nastartovali věci.
Tento kód byl upraven odtud.
Document.write způsobem
Moderní děti nepoužívají document.write, ale pokud jste příliš starí:
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();