除了使用JS库之外,最简单的方法是进行XMLHttpRequest并评估返回值。当数据返回时,“onload”将被触发,“oninit”将在您评估之后立即触发。
编辑:如果您想对此进行排序,可以创建一个AssetLoader,该AssetLoader接受脚本数组,并且只有在获取和初始化前面的脚本后才会执行eval()。
编辑2:您还可以使用评论中引用的脚本.onload。 eval方法的优点在于您可以分离和控制脚本导入的加载和执行部分。
编辑3:这是一个示例。考虑一个名为foo.js的文件,其中包含以下内容:
function initScript (scriptString) {
window.eval(scriptString);
}
function getScript (url, loadCallback, initCallback, callbackScope) {
var req = new XMLHttpRequest();
req.open('GET', url);
req.onreadystatechange = function (e) {
if (req.readyState == 4) {
if (loadCallback) loadCallback.apply(callbackScope);
initScript.call(null, req.responseText);
if (initCallback) initCallback.apply(callbackScope);
}
}
req.send();
}
function fooScriptLoaded () {
alert('script loaded');
}
function fooScriptInitialized () {
alert('script initialized');
foo();
}
window.onload = function () {
getScript('foo.js', fooScriptLoaded, fooScriptInitialized, null);
}
你将会看到警告信息 "脚本已加载","脚本已初始化",以及 "bar"。显然,在这里的XMLHttpRequest 的实现并不完整,你可以对任何想要执行脚本的范围进行各种操作,但这就是它的核心。
onload
内进行测试,例如if ('jQuery' in window)
。不过对此我没有IE方面知识。 - Marcel Korpel