我试图按顺序加载一组脚本,但onload事件没有为我触发。
var scripts = [
'//cdnjs.cloudflare.com/ajax/libs/less.js/1.3.3/less.min.js',
'//cdnjs.cloudflare.com/ajax/libs/handlebars.js/1.0.0-rc.3/handlebars.min.js',
MK.host+'/templates/templates.js'
];
function loadScripts(scripts){
var script = scripts.shift();
var el = document.createElement('script');
el.src = script;
el.onload = function(script){
console.log(script + ' loaded!');
if (scripts.length) {
loadScripts(scripts);
}
else {
console.log('run app');
MK.init();
}
};
$body.append(el);
}
loadScripts(scripts);
字符串
我猜像el.onload这样的原生事件在使用jQuery将元素追加到DOM时不会触发。如果我使用本机document.body.appendChild(el)
,那么它会按预期触发。
3条答案
按热度按时间bttbmeg01#
src
属性应该在onload
事件后设置,例如:字符串
在**附加
onload
事件之前,还需要将脚本追加到DOM中:型
请记住,您需要检查
readystate
的IE支持。如果你使用的是jQuery,你也可以尝试getScript()
方法:http://api.jquery.com/jQuery.getScript/koaltpgm2#
我遇到了类似的问题,试图测试jQuery是否已经出现在页面上,如果没有强制加载,然后执行一个函数。我尝试了@大卫Hellsing的变通方法,但没有机会满足我的需求。事实上,
onload
指令立即被求值,然后$
在这个函数中的用法还不可能(是的,“$不是一个函数”。所以,我提到了这篇文章:https://developer.mozilla.org/fr/docs/Web/Events/load并将事件侦听器附加到我的脚本对象。
字符串
对于我的需要,它现在工作得很好。希望能对别人有所帮助:)
v7pvogib3#
按顺序加载脚本的工作方式(即。等待直到加载一个,然后加载另一个,等等...)
以下脚本被添加到html页面:
字符串
重要的是要在每个**中返回结果".then”using"()=>"**这被称为Chaining:
总是返回结果,否则回调将无法捕获前一个promise的结果(对于箭头函数,()=> x是()=> { return x;})
加载的html页面上的结果:
型
x1c 0d1x的数据