Created
September 30, 2010 03:39
-
-
Save getify/603980 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// HOWTO: load LABjs itself dynamically! | |
// inline this code in your page to load LABjs itself dynamically, if you're so inclined. | |
(function (global, oDOC, handler) { | |
var head = oDOC.head || oDOC.getElementsByTagName("head"); | |
function LABjsLoaded() { | |
// do cool stuff with $LAB here | |
} | |
// loading code borrowed directly from LABjs itself | |
setTimeout(function () { | |
if ("item" in head) { // check if ref is still a live node list | |
if (!head[0]) { // append_to node not yet ready | |
setTimeout(arguments.callee, 25); | |
return; | |
} | |
head = head[0]; // reassign from live node list ref to pure node ref -- avoids nasty IE bug where changes to DOM invalidate live node lists | |
} | |
var scriptElem = oDOC.createElement("script"), | |
scriptdone = false; | |
scriptElem.onload = scriptElem.onreadystatechange = function () { | |
if ((scriptElem.readyState && scriptElem.readyState !== "complete" && scriptElem.readyState !== "loaded") || scriptdone) { | |
return false; | |
} | |
scriptElem.onload = scriptElem.onreadystatechange = null; | |
scriptdone = true; | |
LABjsLoaded(); | |
}; | |
scriptElem.src = "/path/to/LAB.js"; | |
head.insertBefore(scriptElem, head.firstChild); | |
}, 0); | |
// required: shim for FF <= 3.5 not having document.readyState | |
if (oDOC.readyState == null && oDOC.addEventListener) { | |
oDOC.readyState = "loading"; | |
oDOC.addEventListener("DOMContentLoaded", handler = function () { | |
oDOC.removeEventListener("DOMContentLoaded", handler, false); | |
oDOC.readyState = "complete"; | |
}, false); | |
} | |
})(window, document); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// compressed more suitable for inlining | |
// ~640b before gzip | |
(function(g,b,d){var c=b.head||b.getElementsByTagName("head"),D="readyState",E="onreadystatechange",F="DOMContentLoaded",G="addEventListener",H=setTimeout; | |
function f(){ | |
// $LAB stuff here | |
} | |
H(function(){if("item"in c){if(!c[0]){H(arguments.callee,25);return}c=c[0]}var a=b.createElement("script"),e=false;a.onload=a[E]=function(){if((a[D]&&a[D]!=="complete"&&a[D]!=="loaded")||e){return false}a.onload=a[E]=null;e=true;f()}; | |
a.src="/path/to/LAB.js"; | |
c.insertBefore(a,c.firstChild)},0);if(b[D]==null&&b[G]){b[D]="loading";b[G](F,d=function(){b.removeEventListener(F,d,false);b[D]="complete"},false)}})(this,document); |
Heh. Deserves a comment, don't you think?
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
@tobie -- it's to address an older IE quirk/bug where the [0] element is not yet set, and if you capture a ref to it too early, when it's made available, your ref will be invalid.