Динамически загружать дополнительные исходные файлы Javascript с помощью createElement (); - PullRequest
0 голосов
/ 19 января 2011

Мне нужно динамически загрузить какой-нибудь источник скрипта.Поскольку я не могу использовать jQuery и не знаю о методе XmlHttpRequest + eval, я попытался сделать это следующим образом:

API.prototype.initCallback = null;
API.prototype.sourceLoadCnt = 0;

API.prototype.sourceReady = function () {
    this.sourceLoadCnt--;
    if(this.sourceLoadCnt===0){
        this.initCallback();    //if all sources loaded
    }
}

API.prototype.init = function (callback) {

    this.initCallback = callback;

    var _this = this;
    var js = "../../js/";

    var script1 = document.createElement('script');
    script1.type = 'text/javascript';
    script1.src = js+'script1.js';
    this.sourceLoadCnt++;
    script1.onload = function(){ _this.sourceReady() };

    var script2 = document.createElement('script');
    script2.type = 'text/javascript';
    script2.src = js+'script2.js';
    this.sourceLoadCnt++;
    script2.onload = function(){ _this.sourceReady() };

    var css1 = document.createElement('link');
    css1.type = 'text/css';
    css1.rel = 'stylesheet';
    css1.href = 'style.css';
    css1.media = 'screen';
    this.sourceLoadCnt++;
    css1.onload = function(){ _this.sourceReady() };

    head.appendChild(script1);
    head.appendChild(script2);
    head.appendChild(css1);
};

Моя проблема в том, что функция sourceReadyзвонил только один раз.

Я все еще мог изменить все, чтобы загрузить его через XmlHttpRequest, но мне любопытно, почему мой путь не работает.У кого-нибудь есть идея?

1 Ответ

1 голос
/ 19 января 2011

Это может быть потому, что API.prototype.sourceLoadCnt не должно существовать, это должна быть переменная экземпляра, которая живет на this.

То, как вы его закодировали, будет работать только в том случае, если у вас есть только один экземпляр, и если у вас есть только один экземпляр, то путь oob / prototype выглядит как ошибка проектирования.

...