Content Loaded Event Adapter

Intent

I want to know when the DOM has loaded, cross-browser, without using browser detection. I want to subscribe to this as an event through a single point of entry.

Programming by Intent

ContentLoadAdapter = new function(){};
EventPublisher.get(ContentLoadAdapter, "loaded").add(loadHandler);
function loadHandler(e) { alert("loaded"); }

As you can see, there is no code for ContentLoadAdapter. This is exactly how the code started out. I followed Robert Martin's example of Programming by Intent.

Test Case

 <-------- the img tags.

Browser Results
Firefox 2.0 IE7 Safari 3 Opera 9.2
DOMContentLoaded poll poll DOMContentLoaded

The test was run both with and without a doctype, yeilding the same results in all tested browsers.

Browser Notes

IE

documentElement.doScroll is used in a poll function.

Safari

document.readyState is checked in a poll function.

Strategy

Create a fireOnce function.

1. Attach DOMContentLoaded EventListener, 2. poll readyState, 3. attach window.onload AOP before advice. For all three, the callBack is fireOnce.

The fallback strategy for DOMContentLoaded not firing is to poll, in order of preference, documentElement.readyState, then document.readyState.

*Note: When the image is cached, onload will sometimes fire before the readyState poll is complete. In this case, Safari 3 and IE7 will result in "load".

asdfghjkl;qwertyuiopzxcvbnm,.asdfghjkl;qwertyuiopzxcvbnm,.asdfghjkl;qwertyuiopzxcvbnm,.asdfghjkl;qwertyuiopzxcvbnm,.asdfghjkl;qwertyuiopzxcvbnm,.asdfghjkl;qwertyuiopzxcvbnm,.asdfghjkl;qwertyuiopzxcvbnm,.asdfghjkl;qwertyuiopzxcvbnm,.asdfghjkl;qwertyuiopzxcvbnm,.asdfghjkl;qwertyuiopzxcvbnm,.asdfghjkl;qwertyuiopzxcvbnm,.asdfghjkl;qwertyuiopzxcvbnm,.asdfghjkl;qwertyuiopzxcvbnm,.asdfghjkl;qwertyuiopzxcvbnm,.asdfghjkl;qwertyuiopzxcvbnm,.asdfghjkl;qwertyuiopzxcvbnm,.asdfghjkl;qwertyuiopzxcvbnm,.asdfghjkl;qwertyuiopzxcvbnm,.asdfghjkl;qwertyuiopzxcvbnm,.asdfghjkl;qwertyuiopzxcvbnm,.asdfghjkl;qwertyuiopzxcvbnm,.asdfghjkl;qwertyuiopzxcvbnm,.asdfghjkl;qwertyuiopzxcvbnm,.asdfghjkl;qwertyuiopzxcvbnm,.asdfghjkl;qwertyuiopzxcvbnm,.asdfghjkl;qwertyuiopzxcvbnm,.asdfghjkl;qwertyuiopzxcvbnm,.asdfghjkl;qwertyuiopzxcvbnm,.asdfghjkl;qwertyuiopzxcvbnm,.asdfghjkl;qwertyuiopzxcvbnm,.asdfghjkl;qwertyuiopzxcvbnm,.asdfghjkl;qwertyuiopzxcvbnm,.asdfghjkl;qwertyuiopzxcvbnm,.asdfghjkl;qwertyuiopzxcvbnm,.asdfghjkl;qwertyuiopzxcvbnm,.asdfghjkl;qwertyuiopzxcvbnm,.asdfghjkl;qwertyuiopzxcvbnm,.asdfghjkl;qwertyuiopzxcvbnm,.asdfghjkl;qwertyuiopzxcvbnm,.asdfghjkl;qwertyuiopzxcvbnm,.asdfghjkl;qwertyuiopzxcvbnm,.asdfghjkl;qwertyuiopzxcvbnm,.asdfghjkl;qwertyuiopzxcvbnm,.asdfghjkl;qwertyuiopzxcvbnm,.asdfghjkl;qwertyuiopzxcvbnm,.asdfghjkl;qwertyuiopzxcvbnm,.asdfghjkl;qwertyuiopzxcvbnm,.asdfghjkl;qwertyuiopzxcvbnm,.asdfghjkl;qwertyuiopzxcvbnm,.asdfghjkl;qwertyuiopzxcvbnm,.asdfghjkl;qwertyuiopzxcvbnm,.asdfghjkl;qwertyuiopzxcvbnm,.asdfghjkl;qwertyuiopzxcvbnm,.asdfghjkl;qwertyuiopzxcvbnm,.asdfghjkl;qwertyuiopzxcvbnm,.asdfghjkl;qwertyuiopzxcvbnm,.asdfghjkl;qwertyuiopzxcvbnm,.asdfghjkl;qwertyuiopzxcvbnm,.asdfghjkl;qwertyuiopzxcvbnm,.asdfghjkl;qwertyuiopzxcvbnm,.asdfghjkl;qwertyuiopzxcvbnm,.asdfghjkl;qwertyuiopzxcvbnm,.asdfghjkl;qwertyuiopzxcvbnm,.asdfghjkl;qwertyuiopzxcvbnm,.asdfghjkl;qwertyuiopzxcvbnm,.asdfghjkl;qwertyuiopzxcvbnm,.asdfghjkl;qwertyuiopzxcvbnm,.asdfghjkl;qwertyuiopzxcvbnm,.asdfghjkl;qwertyuiopzxcvbnm,.asdfghjkl;qwertyuiopzxcvbnm,.asdfghjkl;qwertyuiopzxcvbnm,.asdfghjkl;qwertyuiopzxcvbnm,.asdfghjkl;qwertyuiopzxcvbnm,.asdfghjkl;qwertyuiopzxcvbnm,.asdfghjkl;qwertyuiopzxcvbnm,.asdfghjkl;qwertyuiopzxcvbnm,.asdfghjkl;qwertyuiopzxcvbnm,.asdfghjkl;qwertyuiopzxcvbnm,.asdfghjkl;qwertyuiopzxcvbnm,.asdfghjkl;qwertyuiopzxcvbnm,.asdfghjkl;qwertyuiopzxcvbnm,.asdfghjkl;qwertyuiopzxcvbnm,.asdfghjkl;qwertyuiopzxcvbnm,.asdfghjkl;qwertyuiopzxcvbnm,.asdfghjkl;qwertyuiopzxcvbnm,.asdfghjkl;qwertyuiopzxcvbnm,.asdfghjkl;qwertyuiopzxcvbnm,.asdfghjkl;qwertyuiopzxcvbnm,.asdfghjkl;qwertyuiopzxcvbnm,.asdfghjkl;qwertyuiopzxcvbnm,.asdfghjkl;qwertyuiopzxcvbnm,.asdfghjkl;qwertyuiopzxcvbnm,.asdfghjkl;qwertyuiopzxcvbnm,.asdfghjkl;qwertyuiopzxcvbnm,.asdfghjkl;qwertyuiopzxcvbnm,.asdfghjkl;qwertyuiopzxcvbnm,.asdfghjkl;qwertyuiopzxcvbnm,.asdfghjkl;qwertyuiopzxcvbnm,.asdfghjkl;qwertyuiopzxcvbnm,.asdfghjkl;qwertyuiopzxcvbnm,.asdfghjkl;qwertyuiopzxcvbnm,.asdfghjkl;qwertyuiopzxcvbnm,.asdfghjkl;qwertyuiopzxcvbnm,.asdfghjkl;qwertyuiopzxcvbnm,.asdfghjkl;qwertyuiopzxcvbnm,.asdfghjkl;qwertyuiopzxcvbnm,.asdfghjkl;qwertyuiopzxcvbnm,.asdfghjkl;qwertyuiopzxcvbnm,.asdfghjkl;qwertyuiopzxcvbnm,.asdfghjkl;qwertyuiopzxcvbnm,.asdfghjkl;qwertyuiopzxcvbnm,.asdfghjkl;qwertyuiopzxcvbnm,.asdfghjkl;qwertyuiopzxcvbnm,.asdfghjkl;qwertyuiopzxcvbnm,.asdfghjkl;qwertyuiopzxcvbnm,.asdfghjkl;qwertyuiopzxcvbnm,.asdfghjkl;qwertyuiopzxcvbnm,.asdfghjkl;qwertyuiopzxcvbnm,.asdfghjkl;qwertyuiopzxcvbnm,.asdfghjkl;qwertyuiopzxcvbnm,.asdfghjkl;qwertyuiopzxcvbnm,.asdfghjkl;qwertyuiopzxcvbnm,.asdfghjkl;qwertyuiopzxcvbnm,.asdfghjkl;qwertyuiopzxcvbnm,.asdfghjkl;qwertyuiopzxcvbnm,.asdfghjkl;qwertyuiopzxcvbnm,.asdfghjkl;qwertyuiopzxcvbnm,.asdfghjkl;qwertyuiopzxcvbnm,.

Live Test Result: loading...

 

*AnimTree
*Tabs
*GlideMenus
*DragLib