0

我正在创建一个需要 jquery 和 jquery ui 的小书签,并且无法使健壮/灵活的版本正常工作(已搜索 SO 和各种博客),但他们似乎只检查一个文件是否已加载(例如 jQuery)或仅加载 jQuery 和其他按顺序排列文件,而不检查它们是否首先加载。

我真的很喜欢这一个:

(function(){

    // the minimum version of jQuery we want
    var v = "1.8.2";

    // check prior inclusion and version
    if (window.jQuery === undefined || window.jQuery.fn.jquery < v) {
        var done = false;
        var script = document.createElement("script");
        script.src = "http://ajax.googleapis.com/ajax/libs/jquery/" + v + "/jquery.min.js";
        script.onload = script.onreadystatechange = function(){
            if (!done && (!this.readyState || this.readyState == "loaded" || this.readyState == "complete")) {
                done = true;
                initMyBookmarklet();
            }
        };
        document.getElementsByTagName("head")[0].appendChild(script);
    } else {
        initMyBookmarklet();
    }

    function initMyBookmarklet() {
        (window.myBookmarklet = function() {
            $('body').append('hello world');
        })();
    }

})();

它为 jQuery 设置了最低版本,并且仅在需要时加载。但是我如何也用 jQuery UI 来解决这个问题呢?例如,设置一个最小版本并仅在需要时加载它并确保它们以正确的顺序加载。

任何指针将不胜感激,

4

1 回答 1

0

你在正确的轨道上......加载jquery后再次检查jquery ui

(function(){
    var addScript = function (path, callback) {
        var done = false;
        var script = document.createElement("script");
        script.src = path;
        script.onload = script.onreadystatechange = function(){
            if (!done && (!this.readyState || this.readyState == "loaded" || this.readyState == "complete")) {
                done = true;
                if (callback) {
                    callback ();
                }
            }
        };
        document.getElementsByTagName("head")[0].appendChild(script);
    };

    var initMyBookmarklet = function () {
        (window.myBookmarklet = function() {
            $('body').append('hello world');
        })();
    }

    var checkForJQueryUI = function () {
        if (condition for jquery ui) {
            addScript("http://jquery-ui-path-goes-here/file.js", initMyBookmarklet);
        } else {
            initMyBookmarklet();
        }
    };

    var checkForJQuery = function () {
        // the minimum version of jQuery we want
        var v = "1.8.2";
        // check prior inclusion and version
        if (window.jQuery === undefined || window.jQuery.fn.jquery < v) {
            addScript("http://ajax.googleapis.com/ajax/libs/jquery/" + v + "/jquery.min.js", checkForJQueryUI);
        } else {
            checkForJQueryUI();
        }
    };

    checkForJQuery();
})();
于 2013-03-16T11:07:35.070 回答