我想用javascript做一些非常简单的事情。我有一个main.js文件,需要调用math.js.中的计算方法
如果我在index.html中包含这两个带有script标记的文件,首先是math.js,然后是main.js,我是否保证在我可以在main.js中使用它之前,math.jss已经加载完毕?
如果没有,我需要像我在这里读到的那样做一些过度的黑客攻击吗?我如何在另一个JavaScript文件中包含一个JavaScript文件?或者更糟的是,因为我甚至看不到在这个链接中是如何实际考虑依赖性的。
更新:为什么我不能像Dashcode看起来那样做?我如何添加我的库以加载Dashcode部件,即只使用document.write("…")?事实上,如果库大于main.js,document.write在非常慢的连接上是否足够健壮?
在math.js中设置一个变量,如果该变量存在,则在main.js中proove。
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);
您可以查看RequireJS以确保加载了依赖项
此外,JS从上到下被加载和解析。无论哪个先出现在源中,都会先获取并首先解析(但这并不能保证顺序,因为某些文件的服务器可能会很慢)。这就是为什么建议如果您使用库和工具包(如jQuery和其他工具),则应该先加载它们。
load
事件中调用初始代码。甚至在加载页面所需的所有文件后,它也会触发。
为什么不使用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