프로그램/html

내가 만든 스크립트 로더

milktea.kang 2010. 12. 14. 12:08
function FileLoader(){
    this.Header = document.getElementsByTagName("head")[0];
    this.Files = new Array();
    this.AddScriptFile = function(src){
        var scripts = document.getElementsByTagName("script");
        var IsLoaded = false;
        for(i=0;i<scripts.length;i++){
            if(scripts[i].src.replace(/([\W\w]+\w+\.\w+)(\?[\w\W]+)?/, "$1") == src){
                IsLoaded = true;
            }
        }
        if(!IsLoaded){
            var file = document.createElement("script");
            file.type = "text/javascript";
            //file.charset = "shift-jis";
            file.src = src;
            this.Files.push(file);
        }
    }
    this.AddCSSFile = function(href){
        var styles = document.getElementsByTagName("link");
        var IsLoaded = false;
        for(i=0;i<styles.length;i++){
            if(styles[i].href.replace(/([\W\w]+\w+\.\w+)(\?[\w\W]+)?/, "$1") == href){
                IsLoaded = true;
            }
        }
        if(!IsLoaded){
            var file = document.createElement("link");
            file.type = "text/css";
            file.rel = "stylesheet";
            //file.charset = "shift-jis";
            file.href = href;
            this.Files.push(file);
        }
    }
    this.Load = function(p_callback){
        var ThisObj = this;
        var callback = p_callback || function(){}
        if(this.Files.length > 0){
            if(this.Files[0].readyState){
                this.Files[0].onreadystatechange = function(){
                    if(ThisObj.Files[0].readyState == "loaded" || ThisObj.Files[0].readyState == "complete"){
                        ThisObj.Files.shift();
                        ThisObj.Load(callback);
                    }
                }
            }
            else{
                this.Files[0].onload = function(){
                    ThisObj.Files.shift();
                    ThisObj.Load(callback);
                }
            }
            this.Header.appendChild(this.Files[0]);
        }
        else{ callback(); }
    }
}

사용법
var Loader = new FileLoader();
Loader.AddScriptFile("../../Script/jquery/jquery.js");
Loader.AddScriptFile("../../Script/jquery/alerts/jquery.alerts.js");
Loader.AddCSSFile("../../Script/jquery/alerts/jquery.alerts.css");
Loader.Load(function(){
    jAlert(g_strAlertOnBrowser, 'インフォメーション', function(){} );
});

파일을 순차적으로 읽어오는 로더라고 하면 될까
페이지 로딩하면서 스크립트 파일을 하나씩 읽어내는 함수
파일 하나가 로딩완료되면 다음파일로...
스크립트 파일이랑 스타일시트 둘 다 가능하게 ㅎㅎ