为什么这到达main()但jQuery仍未定义?

时间:2012-01-20 17:08:17

标签: jquery google-chrome greasemonkey preloader userscripts

我正在尝试修改各种加载器,因此在调用main函数之前可以处理多个脚本。这应该加载jQuery,然后加载jQueryUI,然后调用main()来实际启动用户脚本。但是,它确实循环,但是当它到达main()时,我从Chrome中得到一个关于jQuery未定义的控制台错误。

!function loader (i) {
        var requires = [ 'http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js'
                       , 'https://ajax.googleapis.com/ajax/libs/jqueryui/1.8/jquery-ui.min.js'
                       ];
        var loadScript = function (i) {
                    var script    = document.createElement('script');
                    script.type   = 'text/javascript';
                    script.src    = requires[i];
                    script.onload = (++i === requires.length) ? function () { loader(i); }
                                                              : function () { main(); }
                    document.head.appendChild(script);
            };

        loadScript(i || 0);
}();

function main () {
    console.log(jQuery.version);
    console.log(jQuery.ui.version);
}

2 个答案:

答案 0 :(得分:0)

这是我提出的最终剧本,如果有人正在寻找这种类型的东西。 http://userscripts.org/scripts/review/123588

彼拉多用三元组抓住了它的一部分。 Nate B也有部分内容,jQuery使用jQuery.fn.jquery(但UI不一致并使用jQuery.ui.version)。

很高兴弄清楚如何跳过中间的包装位,对于第三方来说,但这很有用。 :)

答案 1 :(得分:-1)

我认为jQuery.version不是有效的属性,而是返回undefined。在那里尝试$.fn.jquery,看看会发生什么。