Giả sử bạn sẽ thực hiện một bao gồm trên toàn bộ nhiều trang và bên trong bao gồm đó, bạn muốn thực hiện một số nội dung cụ thể của jQuery. Trang đó có thể đã hoặc chưa tải jQuery. Nếu nó đã xuất hiện, bạn không muốn tải lại, nhưng nếu không, bạn sẽ làm. Điều này hoạt động cho điều đó.
Cách không đồng bộ thông minh
// 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 );
Lưu ý rằng có nhiều chỗ mã jQuery bạn định chạy bị gọi. Đừng lặp lại chính mình ở đó, hãy đặt nó vào một chức năng mà bạn có thể gọi để khởi động mọi thứ.
Mã này được điều chỉnh từ đây.
Document.write cách
Những đứa trẻ sành điệu không sử dụng document.write, nhưng nếu bạn quá già để quan tâm:
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();