【发布时间】:2014-04-22 22:31:02
【问题描述】:
我有一种情况,通过检查标志,我需要将 1 个或多个 .js 文件动态加载到页面。我希望在页面代码开始执行之前加载并准备好所有这些文件。 .js 文件似乎正确加载,但是 $(document).ready(function(){}); 上出现错误在页面上。这是我的代码的“瘦”版本:
<script type="text/javascript">
if (typeof ScriptLoaded == 'undefined') {
var scripts = ["js/jquery-1.6.2.min.js"];
for (i=0; i<scripts.length; i++) {
var head = document.getElementsByTagName('head')[0],
script = document.createElement('script');
script.type = "text/javascript";
script.src = scripts[i];
script.onload = oCallback();
script.onreadystatechange = function() {
if (this.readyState == 'loaded' || this.readyState == 'complete') {
oCallback();
}
}
head.appendChild(script)
}
}
$(document).ready(function() {
alert("ready");
});
function oCallback() {
}
</script>
我在这个例程中加载了超过 1 个 .js 文件,但为了简单起见,这里只指定了 jQuery。每当执行此代码时,我都会收到错误“$ 未定义”。我的回调例程什么都不做 - 只是想忽略回调以便完全加载文件。
我知道我这里有问题 - 我只是不明白。
谢谢!
更新
似乎在脚本完全加载之前调用了 oCallback() 函数,或者代码完全插入到 DOM 中。经过反复试验,这似乎在 IE 和 FF 中都有效:
<script type="text/javascript">
if (typeof ScriptLoaded == 'undefined') {
var scripts = ["js/jquery-1.6.2.min.js"];
for (i=0; i<scripts.length; i++) {
var head = document.getElementsByTagName('head')[0],
script = document.createElement('script');
script.type = "text/javascript";
script.src = scripts[i];
script.onload = oCallback();
script.onreadystatechange = function() {
if (this.readyState == 'loaded' || this.readyState == 'complete') {
oCallback();
}
}
head.appendChild(script)
}
}
function oCallback() {
}
function oReady() {
$(document).ready(function() {
alert("ready");
});
}
window.onload = oReady;
</script>
【问题讨论】:
-
你试过节点吗? nodejs.org
标签: jquery