我有一个javascript小部件,通过插入单个脚本标记(因为应用程序应该很容易分发)就可以包含在页面中:
<script type="text/javascript" src="loadMyWidget.js"></script>然后,loadMyWidget.js需要加载多个脚本文件,这些文件必须按一定的顺序运行。我试图通过将脚本元素插入到DOM中来异步加载它们,但这并不能让我控制顺序。
我也尝试过使用适用于现代浏览器的head.js,但我无法在IE7和8中使用它。
不幸的是,将脚本缩小到一个文件中是很困难的,因为它由来自不同项目的许多文件组成,并且我不知道何时更新脚本。
看起来很简单,我需要按照一定的顺序从javascript代码中加载javascript文件,并让它在所有浏览器中都能工作,包括IE7和8。
发布于 2012-05-31 22:05:40
我遇到了完全相同的问题,并通过以下方式进行处理:
document.write('<script type="text/javascript" src="other1.js"></script>');
document.write('<script type="text/javascript" src="other2.js"></script>');
runSomeCode();代码将被加载并同步运行。优点:简单,轻便,跨浏览器兼容,没有开发人员。缺点:丑陋。
发布于 2012-05-31 21:28:10
如果您正在使用jQuery.getScript(),则可以将其用作$.when(),以将执行推迟到程序停止加载。
如果您所说的“顺序执行”是指您需要在执行之前加载必备组件,则可以使用以下方法
$(function(){
$.when(
$.getScript("/script1"),
$.getScript("/scirpt2"),
$.getScript("/script3")
}).done(function(){
// do stuff with the contents of my new script files
});如果您所说的顺序执行意味着您需要一个接一个地执行文件,请尝试执行以下命令:
$.Deferred()
.then(function () { return $.getScript("/script1"); })
.then(function () { return $.getScript("/scirpt2"); })
.then(function () { return $.getScript("/script3"); })
.resolve();当然,这需要jQuery,在您编辑之后,这可能不适用于您。
推荐阅读
发布于 2012-05-31 21:57:34
如果你需要香草JS,像这样的东西可以工作:
function loadScripts(scripts, complete) {
var loadScript = function( src ) {
var xmlhttp, next;
if (window.XMLHttpRequest) {
xmlhttp = new XMLHttpRequest();
} else {
try {
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
} catch(e) {
return;
}
}
xmlhttp.onreadystatechange = function() {
if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
eval(xmlhttp.responseText);
next = scripts.shift();
if ( next ) {
loadScript(next);
} else if ( typeof complete == 'function' ) {
complete();
}
}
}
xmlhttp.open("GET", src , true);
xmlhttp.send();
};
loadScript( scripts.shift() );
}
loadScripts(['jquery.js','jquery.plugin.js'], function() {
console.log('loaded');
});在Chrome中测试,应该也可以在IE中工作。
https://stackoverflow.com/questions/10834511
复制相似问题