我添加一些<script/>
来自 javascript 的标签来加载一些库(例如 jquery)。加载所有库后,我执行主代码。为了等到一切准备就绪,我使用类似于中的解决方案这个答案 https://stackoverflow.com/questions/559150/best-practice-for-using-window-onload/559161#559161(在网上找到的)。
现在,故事:http://jsfiddle.net/EH84z/ http://jsfiddle.net/EH84z/
function load_javascript(src) {
var a = document.createElement('script');
a.type = 'text/javascript';
a.src = src;
var s = document.getElementsByTagName('script')[0];
s.parentNode.insertBefore(a, s);
}
load_javascript('http://ajax.googleapis.com/ajax/libs/jquery/1.4.1/jquery.min.js');
function addEvent(elm, evType, fn, useCapture) {
//Credit: Function written by Scott Andrews
//(slightly modified)
var ret = 0;
if (elm.addEventListener) {
ret = elm.addEventListener(evType, fn, useCapture);
} else if (elm.attachEvent) {
ret = elm.attachEvent('on' + evType, fn);
} else {
elm['on' + evType] = fn;
}
return ret;
}
addEvent(window, "load", function() {
console.log(window.jQuery + ' ' + window.$);
$(document);
}, false);
它在 Firefox 中工作正常,但在 Chrome 中经常失败。每当我按下 jsfiddle“运行”按钮时,回调就会在加载 JQuery 之前执行,从而在 Chrome 控制台中给出错误。
这是否意味着我滥用了addEventListener
可怕吗?如果是,它的正确用途是什么以及我该如何做really等到所有脚本加载完毕?
Thanks!
PS 尚未在任何其他浏览器中进行测试,因此如果在其他地方失败,请发表评论。
edit
如果我等一秒钟(使用setTimout
)在测试之前,成功率提高到100%。一个例子http://jsfiddle.net/EH84z/1/ http://jsfiddle.net/EH84z/1/