Показать сообщение отдельно
  #3 (permalink)  
Старый 09.01.2013, 18:24
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

Кину сюда то что писал человеку на почту:

$Load = (function() {

    // в этой переменной будем хранить ссылки на скрипты которые уже загружали
    var loadedScripts = {};

    function loadAsync(src, callback) {

        if (src in loadedScripts) {
            callback(loadedScripts[src] || src);
        } else {
            var script = document.createElement('script');
            script.type = 'text/javascript';

            if ("onload" in script || !("readyState" in script)) {
                script.onload = function() {
                    callback(src);
                }
            } else {
                script.onreadystatechange = function() {
                    if (this.readyState == "loaded" ||
                            this.readyState == "complete") {
                        callback(src);
                    }
                }
            }

            script.src = src;
            document.documentElement.firstChild.appendChild(script);
        }
    }

    function loader(scripts, onload) {

        scripts = typeof scripts === "string" ? [scripts] : scripts;

        var
            asyncCallback,
            length = loader.instances.length;

        if (scripts.length === 0) {
            return onload && onload.call(this);
        }

        loadAsync(scripts.shift(), asyncCallback = function(src) {
            if (typeof src === "function") {
                src();
            } else if (loader.instances.length > length) {
                loadedScripts[src] = loader.instances[ length++ ];
                loadedScripts[src]();
            } else {
                loadedScripts[src] = null;
            }

            if (scripts.length === 0) {
                onload && onload.call(this);
            } else {
                loadAsync(scripts.shift(), asyncCallback);
            }
        });
    }

    loader.instances = [];

    return loader;
})();


Использовать примерно так:
$Load(['script1.js', 'script2.js'], function() {
    // loaded
});

// ну или вместо массива строка:
$Load('script1.js', function() {
    // loaded
});


Далее в каждом скрипте который загружаете аяксом, код который нужно снова выполнить, обернуть вот так:
$Load.instances.push(function(){
    // тут ваш код, который будет автоматически выполнен
    // после загрузки или в уже загруженном скрипте.
});
__________________
хм Russians say завтра but завтра doesn't mean "tomorrow" it just means "not today."
HTML5 history API рассширение для браузеров не поддерживающих pushState, replaceState
QSA CSS3 Selector Engine

Последний раз редактировалось devote, 10.01.2013 в 00:33.
Ответить с цитированием