脚本上的JS'load'事件是否保证完整的脚本加载?

时间:2017-02-11 07:50:46

标签: javascript onload dom-events

我遇到了脚本元素异步加载保证的问题。

当在包含许多其他脚本的页面上调用“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'回调后,脚本实际上已完全加载到页面上?谢谢。

0 个答案:

没有答案