loadscript: simplify and improve script loading - jscancer - Javascript crap (relatively small)
(HTM) git clone git://git.codemadness.org/jscancer
(DIR) Log
(DIR) Files
(DIR) Refs
(DIR) README
(DIR) LICENSE
---
(DIR) commit 8803e0fdca023fa927652585137eb5607355e357
(DIR) parent 76a6ab53c42092f2e4a7d7229b0268cc8fd33fd4
(HTM) Author: Hiltjo Posthuma <hiltjo@codemadness.org>
Date: Sun, 2 Oct 2016 13:19:16 +0200
loadscript: simplify and improve script loading
- change check if loaded: don't keep global table (can be implemented separately).
- simplify check if all scripts are loaded: scripts_load.
- add comment for IE workaround logic.
- simplify example.
Diffstat:
M loadscript/example.html | 5 ++---
M loadscript/loadscript.js | 29 +++++++++++++----------------
2 files changed, 15 insertions(+), 19 deletions(-)
---
(DIR) diff --git a/loadscript/example.html b/loadscript/example.html
@@ -8,13 +8,12 @@
<script type="text/javascript">
var el = document.getElementById("test");
-el.addEventListener("click", function() {
+el.onclick = function() {
scripts_load(["example_load.js"], function() {
test_init();
});
// this.style.display = "none"; // hide button.
- el.removeEventListener("click", this);
-});
+};
</script>
</body>
</html>
(DIR) diff --git a/loadscript/loadscript.js b/loadscript/loadscript.js
@@ -1,19 +1,17 @@
-var script_loaded = {};
-
function script_load(uri, fn) {
- // load script once.
- if (script_loaded[uri] !== undefined)
- return;
var script = document.createElement("script");
script.type = "text/javascript";
script.src = uri;
script.async = true;
+ var loaded = 0;
var onload = function() {
- if (script_loaded[uri] === undefined) {
- script_loaded[uri] = true;
+ // fire fn() once.
+ if (!loaded) {
+ loaded = 1;
fn();
}
};
+ // for IE <= 8.
script.onreadystatechange = function() {
switch (this.readyState) {
case "complete":
@@ -21,20 +19,19 @@ function script_load(uri, fn) {
onload();
}
}
+ // for the normal world.
script.onload = function() {
onload();
};
document.getElementsByTagName("head")[0].appendChild(script);
}
-// load list of uri's, fire fn() when all are loaded.
+// load list of uri's (async, order indetermined), fire fn() when all
+// are loaded.
function scripts_load(uris, fn) {
- var checkfn = function() {
- for (var i = 0; i < uris.length; i++)
- if (script_loaded[uris[i]] === undefined)
- return; // not all scripts are loaded.
- fn();
- };
- for (var i = 0; i < uris.length; i++)
- script_load(uris[i], checkfn);
+ for (var i = 0, loaded = 0; i < uris.length; i++)
+ script_load(uris[i], function() {
+ if (++loaded == uris.length)
+ fn();
+ });
}