We Recommend

Pro JavaScript Techniques Pro JavaScript Techniques
Pro JavaScript Techniques is the ultimate JavaScript book for the modern web developer. It provides everything you need to know about modern JavaScript, and shows what JavaScript can do for your web sites. This book doesn't waste any time looking at things you already know, like basic syntax and structures.


Posted By

elightbo on 03/15/07


Tagged

DOM prototype unobtrusive


Versions (?)


Who likes this?

4 people have marked this snippet as a favorite

vanne
frankyfish
vali29
hans


onDomReady


Published in: JavaScript 


Dan at Vivabit created the DOM Ready extension for the Prototype framework which allows you to start executing code when the DOM is ready and all elements are available, leaving the images and other element loading in the background. Very nice work and something i’ve been waiting for a long time!

  1. // Adapted from DOM Ready extension by Dan Webb
  2. // http://www.vivabit.com/bollocks/2006/06/21/a-dom-ready-extension-for-prototype
  3. // which was based on work by Matthias Miller, Dean Edwards and John Resig
  4. //
  5. // Usage:
  6. //
  7. // Event.onReady(callbackFunction);
  8. Object.extend(Event, {
  9. _domReady : function() {
  10. if (arguments.callee.done) return;
  11. arguments.callee.done = true;
  12.  
  13. if (Event._timer) clearInterval(Event._timer);
  14.  
  15. Event._readyCallbacks.each(function(f) { f() });
  16. Event._readyCallbacks = null;
  17.  
  18. },
  19. onReady : function(f) {
  20. if (!this._readyCallbacks) {
  21. var domReady = this._domReady;
  22.  
  23. if (domReady.done) return f();
  24.  
  25. if (document.addEventListener)
  26. document.addEventListener("DOMContentLoaded", domReady, false);
  27.  
  28. /*@cc_on @*/
  29. /*@if (@_win32)
  30.   var dummy = location.protocol == "https:" ? "https://javascript:void(0)" : "javascript:void(0)";
  31.   document.write("<script id=__ie_onload defer src='" + dummy + "'><\/script>");
  32.   document.getElementById("__ie_onload").onreadystatechange = function() {
  33.   if (this.readyState == "complete") { domReady(); }
  34.   };
  35.   /*@end @*/
  36.  
  37. if (/WebKit/i.test(navigator.userAgent)) {
  38. this._timer = setInterval(function() {
  39. if (/loaded|complete/.test(document.readyState)) domReady();
  40. }, 10);
  41. }
  42.  
  43. Event.observe(window, 'load', domReady);
  44. Event._readyCallbacks = [];
  45. }
  46. Event._readyCallbacks.push(f);
  47. }
  48. });

Report this snippet 

Comments

RSS Icon Subscribe to comments
Posted By: kcmr on September 18, 2008

In version 1.6 we have: document.observe("dom:loaded", functionName)

http://www.prototypejs.org/api/document/observe

Posted By: elightbo on September 26, 2008

Thanks for the tip. I've been using the 1.6 version now...I wonder if I should just delete this snippet.

You need to login to post a comment.