From 1f96d971f17cfb4dd4a1dcef0ffab05e968467cc Mon Sep 17 00:00:00 2001 From: chaffeqa Date: Tue, 16 Sep 2014 19:03:35 -0400 Subject: [PATCH] Correctly handle DOM Ready states Previously, if the script was loaded while in `document.readyState` of `interactive`, the `domReady` function is never called. See https://developer.mozilla.org/en-US/docs/Web/API/document.readyState for explanation of the proper detection of `DOMContentLoaded` --- js/utils/dom.js | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/js/utils/dom.js b/js/utils/dom.js index 22c4e24e4e..43fbbbb283 100644 --- a/js/utils/dom.js +++ b/js/utils/dom.js @@ -1,7 +1,7 @@ (function(window, document, ionic) { var readyCallbacks = []; - var isDomReady = false; + var isDomReady = document.readyState === 'complete' || document.readyState === 'interactive'; function domReady() { isDomReady = true; @@ -11,7 +11,10 @@ readyCallbacks = []; document.removeEventListener('DOMContentLoaded', domReady); } - document.addEventListener('DOMContentLoaded', domReady); + if (!isDomReady){ + document.addEventListener('DOMContentLoaded', domReady); + } + // From the man himself, Mr. Paul Irish. // The requestAnimationFrame polyfill @@ -110,7 +113,7 @@ * @param {function} callback The function to be called. */ ready: function(cb) { - if(isDomReady || document.readyState === "complete") { + if(isDomReady) { ionic.requestAnimationFrame(cb); } else { readyCallbacks.push(cb);