我想在javascript中做一些非常简单的事情。我有一个main.js文件,需要在math.js中调用一个计算方法。
如果我在index.html中包含这两个带脚本标签的文件,首先是math.js然后是main.js,我是否保证math.js在我可以在main.js中使用之前已经完成加载?
如果没有,我是否需要像我在这里阅读How do I include a JavaScript file in another JavaScript file?那样做一些过度的黑客攻击,或者更糟糕的是因为我甚至无法在该链接中看到实际上如何考虑依赖性。
更新:为什么我不能像Dashcode那样做How can I add my library to be loaded Dashcode parts,即只使用document.write('...')?事实上,如果库大于main.js,那么document.write在非常慢的连接上是否足够健壮?
答案 0 :(得分:4)
如果此变量存在,则在math.js中设置变量并在main.js中进行校对。
var mathLoaded = true;
在main.js中:
function loaded() {
return ((typeof mathLoaded) !== 'undefined');
}
编辑:
现在你可以启动一个等待函数,直到它被加载:
function wait() {
if(loaded()) {
//doSomething();
} else {
window.setTimeout(function() { wait(); }, 0);
}
}
window.setTimeout(function() { wait(); }, 0);
答案 1 :(得分:1)
您可以查看RequireJS以确保依赖项已加载
此外,JS被加载并解析为自上而下。首先在源中获取先获取并首先解析(但它不保证顺序,因为某些文件的服务器可能很慢)。这就是为什么建议如果你使用库和工具包(比如jQuery和其他),应该先加载它们。
答案 2 :(得分:1)
不,你不是。可以按任何顺序加载文件。您通常希望从文档load
事件中调用初始代码。一旦加载了页面所需的所有文件,它就会触发。
答案 3 :(得分:1)
为什么不使用window.onload
?
window.onload = function () {
//your code here.
}
或使用跨浏览器addEvent
功能真的很花哨?
var libJS = {
addEvent: function (obj, type, fn) {
if (obj.addEventListener) {
obj.addEventListener(type, fn, false);
return true;
} else if (obj.attachEvent) {
obj['e' + type + fn] = fn;
obj[type + fn] = function () {
obj['e' + type + fn](window.event);
}
var r = obj.attachEvent('on' + type, obj[type + fn]);
return r;
} else {
obj['on' + type] = fn;
return true;
}
}
}
正确地将功能附加到事件......
libJS.addEvent(window, 'load', someMainJsFunction); //add to window.onload