我遇到了脚本元素异步加载保证的问题。
当在包含许多其他脚本的页面上调用“load”回调时,应该在外部脚本中定义的全局变量尚不可用。另一方面,在一些超时后,它变得可见。你可以看到我如何做的例子:
function async(u, c) {
var d = document, t = 'script',
o = d.createElement(t),
s = d.getElementsByTagName(t)[0];
o.async = true;
o.src = '//' + u;
if (c) { var once = false;
o.addEventListener('load', function (e) { if (!once) { once = true; c(null, e); }}, false);
o.onreadystatechange = function () {
//for IE <= 8
if (this.readyState == "complete" || this.readyState == "loaded") {
if (!once) { once = true; c(null, e); }
}
}; }
s.parentNode.insertBefore(o, s);
};
async("cdnjs.cloudflare.com/ajax/libs/ifvisible/1.0.6/ifvisible.min.js", function() {
var f = function() {
var activeSent = false;
// We detected that sometimes ifvisible is actually undefined !!!
if (typeof ifvisible != 'undefined') {
ifvisible.on('wakeup', function () {
if (!activeSent) {
activeSent = true;
console.log("I detected this move.")
}
});
ifvisible.idle();
} else {
console.log("not init.")
}
};
f();
});
<script src="https://getfirebug.com/firebug-lite-debug.js"></script>
<p id="me">
Just move on ME with your mouse
</p>
我的问题 - 是否有一个强有力或宽松的保证,即在调用'load'回调后,脚本实际上已完全加载到页面上?谢谢。