JavaScript 개체 중심 프로그래밍 실전 01 JavaScript Resource Loader

6120 단어 JavaScript
웹 프런트엔드 프로그래밍 과정에서 자바스크립트 스크립트 파일과 css 파일을 동적으로 불러오거나 마운트 해제해야 할 때가 있습니다.예를 들어 우리는 클라이언트 실드의 다언어화된 전환, 사이트 피부의 동적 전환 등을 실현해야 한다.다음은 Javasrcript와 대상 프로그래밍을 결합하여 Javascript/css 파일의 동적 불러오기/마운트 해제를 실현하는 Helper Class를 만들었습니다.
// JavaScriptLoader-Singleton-,Timo.Lee,[email protected]

var Timo = window.Timo || {};

Timo.Html=window.Timo.Html || {};

Timo.Html.ResourceLoader = (function() {

    //Private

    function RegisterJavaScript(URL) {

        var JsFile = document.createElement("script");

        JsFile.setAttribute("type", "text/javascript");

        JsFile.setAttribute("src", URL);

        document.getElementsByTagName("head")[0].appendChild(JsFile);

        return JsFile;

    } //eo end

    function RegisterCss(URL) {

        var CssFile = document.createElement("link");

        CssFile.setAttribute("rel", "stylesheet");

        CssFile.setAttribute("type", "text/css");

        CssFile.setAttribute("href", URL);

        document.getElementsByTagName("head")[0].appendChild(CssFile);

        return CssFile;

    } //eo end

    function ReplaceJavaScript(OriginalURL, NewURL) {

        var scriptList = document.getElementsByTagName("script");

        for (var i = scriptList.length; i >= 0; i--) {

            if (scriptList[i] && scriptList[i].getAttribute("src") != null && scriptList[i].getAttribute("src").indexOf(OriginalURL) != -1) {

                var newScript = RegisterJavaScript(NewURL);

                scriptList[i].parentNode.replaceChild(newScript, scriptList[i]);

            }

        }

    } //eo end

    function ReplaceCss(OriginalURL, NewURL) {

        var cssList = document.getElementsByTagName("link");

        for (var i = cssList.length; i >= 0; i--) {

            if (cssList[i] && cssList[i].getAttribute("href") != null && cssList[i].getAttribute("href").indexOf(OriginalURL) != -1) {

                var newCss = RegisterCss(NewURL);

                cssList[i].parentNode.replaceChild(newCss, cssList[i]);

            }

        }

    } //eo end

    function RemoveJavaScript(URL) {

        var scriptList = document.getElementsByTagName("script");

        for (var i = scriptList.length; i >= 0; i--) {

            if (scriptList[i] && scriptList[i].getAttribute("src") != null && scriptList[i].getAttribute("src").indexOf(URL) != -1) {

                scriptList[i].parentNode.removeChild(scriptList[i]);

            }

        }

    } //eo end

    function RemoveCss(URL) {

        var cssList = document.getElementsByTagName("link");

        for (var i = cssList.length; i >= 0; i--) {

            if (cssList[i] && cssList[i].getAttribute("href") != null && cssList[i].getAttribute("href").indexOf(URL) != -1) {

                cssList[i].parentNode.removeChild(cssList[i]);

            }

        }

    } //eo end

    return {

        RESOURCE_TYPE_CSS: "css",

        RESOURCE_TYPE_JavaScript: "javascript",

        //pulibc

        LoadResource: function(URL, ResourceType) {

            if (!ResourceType) {

                new Error("Missing Parameter ResourceType,The ResourceType would be [css] or [javascript].");

                return;

            }

            if (!URL || URL == "") {

                new Error("Missing Parameter URL.");

                return;

            }

            switch (ResourceType) {

                case "javascript":

                    RegisterJavaScript(URL);

                    break;

                case "css":

                    RegisterCss(URL);

                    break;

                default:

                    break;

            }



        } //eo end

       ,

        //public

        ReplaceResource: function(URL, ResourceType) {

            if (!ResourceType) {

                new Error("Missing Parameter ResourceType,The ResourceType would be [css] or [javascript].");

                return;

            }

            if (!URL || URL == "") {

                new Error("Missing Parameter URL.");

                return;

            }

            switch (ResourceType, OriginalURL, NewURL) {

                case "javascript":

                    ReplaceJavaScript(OriginalURL, NewURL);

                    break;

                case "css":

                    ReplaceCss(OriginalURL, NewURL);

                    break;

                default:

                    break;

            }

        } // eo end

       ,

        //public

        RemoveResource: function(URL, ResourceType) {

            if (!ResourceType) {

                new Error("Missing Parameter ResourceType,The ResourceType would be [css] or [javascript].");

                return;

            }

            if (!URL || URL == "") {

                new Error("Missing Parameter URL.");

                return;

            }

            switch (ResourceType) {

                case "javascript":

                    RemoveJavaScript(URL);

                    break;

                case "css":

                    RemoveCss(URL);

                    break;

                default:

                    break;

            }

        } //eo end

    };

})(); 

 
사용 방법:
 <title>Html Resource Loader Demo</title>

    <script type="text/javascript" src="../JavaScript/Utils/Timo.Html.ResourceLoader.js"></script>

    <script type="text/javascript">

        window.onload = function() {

            //AppInit

        Timo.Html.ResourceLoader.LoadResource("/JavaScript/Test/Demo.js", Timo.Html.ResourceLoader.RESOURCE_TYPE_JavaScript);

        }

    </script>

 
END…..

좋은 웹페이지 즐겨찾기