Angenommen, Sie wollten ein Include auf einer ganzen Reihe von Seiten erstellen, und innerhalb dieses Includes wollten Sie einige jQuery-spezifische Dinge tun. Auf dieser Seite ist möglicherweise jQuery bereits geladen oder nicht. Wenn dies bereits der Fall ist, möchten Sie es nicht erneut laden, aber wenn nicht, tun Sie es. Das funktioniert dafür.
Intelligente asynchrone Methode
// 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 );
Beachten Sie, dass der jQuery-Code, den Sie ausführen möchten, an mehreren Stellen aufgerufen wird. Wiederholen Sie sich dort nicht, setzen Sie es in eine Funktion, die Sie aufrufen können, um die Dinge zu starten.
Dieser Code wurde von hier aus angepasst.
Document.write Weg
Hip Kids verwenden document.write nicht, aber wenn Sie zu alt sind, um sich darum zu kümmern:
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();