Загружать только jQuery, если не присутствует онлайн урок.


Скажите, что вы собираетесь делать включение на целую кучу страниц, а внутри этого вы хотите сделать некоторые специфичные 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, который вы намереваетесь запустить, называется call. Не повторяйте себя там, поставьте его в функцию, которую вы можете вызвать, чтобы отбросить ситуацию.

Этот код был адаптирован отсюда .

# Document.write way

Hip-дети не используют 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("<scr" + "ipt type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></scr" + "ipt>");
}
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();