2

我在一个我没有服务器端访问权限的平台中工作。这意味着我不能将 javascript 文件直接加载到头部,只能加载到正文中。

这是我的负载方式:

function loadjscssfile(filename, filetype){
//http://www.javascriptkit.com/javatutors/loadjavascriptcss.shtml
    if (filetype=="js"){ //if filename is a external JavaScript file
        var fileref=document.createElement('script')
        fileref.setAttribute("type","text/javascript")
        fileref.setAttribute("src", filename)
    }
    else if (filetype=="css"){ //if filename is an external CSS file
        var fileref=document.createElement("link")
        fileref.setAttribute("rel", "stylesheet")
        fileref.setAttribute("type", "text/css")
        fileref.setAttribute("href", filename)
    }
    if (typeof fileref!="undefined")
        document.getElementsByTagName("head")[0].appendChild(fileref)
    }
}

loadjscssfile('https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js','js');
loadjscssfile('http://redacted.com/data.php?rand='+Math.random(),'js');
loadjscssfile('https://raw.github.com/aakilfernandes/jquery.inject/master/jquery.inject.js?rand='+Math.random(),'js');

但是,我加载的第三个 javascript 文件(一个 jQuery 插件)需要 jQuery。

当我加载页面时出现此错误(在 Chrome 中)

Uncaught ReferenceError: jQuery is not defined

我的倾向是我的插件在 jQuery 之前加载。因为如果我刷新页面(当 jQuery 被缓存时),错误就会消失。但是,即使没有缓存 jQuery,我也需要它来工作。想法?

4

3 回答 3

1

这不是一个优雅的解决方案,但它总是对我有用:将 jquery.min.js 文件的内容直接复制/粘贴到您的 html 页面

    <script> ... </script>
于 2012-06-19T15:48:12.277 回答
0

我做的是这个

if (typeof $ === 'undefined') {
    document.write("<script src='//ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js'><\/script>");
    var timeout = 0;
    while (typeof $ === 'undefined' && timeout++ < 100);
}

这将等到 jquery 被加载,然后再继续执行其他任何操作。然后加载你的插件。

于 2012-06-19T15:43:29.790 回答
0

当您尝试时,您必须加载 jQuery 并在加载后运行其他脚本。为此,您可以使用加载程序库,例如yepnopeheadjs,请记住,由于您不能将脚本放在头上,因此您必须将加载程序代码放在脚本中。

您的代码将是这样的:

yepnope( // or head.js
    'https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js',
    'http://redacted.com/data.php?rand='+Math.random(),
    'https://raw.github.com/aakilfernandes/jquery.inject/master/jquery.inject.js?rand='+Math.random()
);

您可以做的另一件事是将 jquery 脚本放在主体上并在其后加载其他脚本:

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<script>
    $.getScript('http://redacted.com/data.php?rand='+Math.random());
    $.getScript('https://raw.github.com/aakilfernandes/jquery.inject/master/jquery.inject.js?rand='+Math.random());
</script>
于 2013-05-03T02:43:08.557 回答