Updated Branches:
  refs/heads/master 95feb23c6 -> b9dcff467

At least on Android ICS WebView, when loading cordova.js asynchronously, it's 
possible to end up in a situation where the DOMContentLoaded has already fired, 
but the document.readyState is not "complete" (but still "interactive").  This 
patches this race condition.

Technically document.readyState === "interactive" is not exactly the same as 
when "DOMContentLoaded" triggers, but since the document is already done 
parsing (ref: http://dev.w3.org/html5/spec/the-end.html) it should be perfectly 
fine for Cordova's intents and purposes.  If you think this is too early, one 
could always defer onDOMContentLoaded.fire() to the subsequent "load" event if 
we find document.readyState == "interactive".

This may be a bit of an edge case, since the same version of Cordova (1.7.0) 
worked fine on Gingerbread, and most people don't load Cordova async, but this 
issue has been noted on other projects/browsers too (ref: 
http://bugs.jquery.com/ticket/10067).

Sorry for not including a test case; if you have a facility for reliably 
testing issues like this, let me know and I'll try to put it in.

Related: https://issues.apache.org/jira/browse/CB-499


Project: http://git-wip-us.apache.org/repos/asf/incubator-cordova-js/repo
Commit: 
http://git-wip-us.apache.org/repos/asf/incubator-cordova-js/commit/b9dcff46
Tree: http://git-wip-us.apache.org/repos/asf/incubator-cordova-js/tree/b9dcff46
Diff: http://git-wip-us.apache.org/repos/asf/incubator-cordova-js/diff/b9dcff46

Branch: refs/heads/master
Commit: b9dcff46715b3d17a05f8724d0623e4af2dd8c7e
Parents: 95feb23
Author: Jarno Rantanen <ja...@jrw.fi>
Authored: Wed May 9 14:08:35 2012 +0300
Committer: Fil Maj <maj....@gmail.com>
Committed: Fri Jun 1 16:51:42 2012 -0700

----------------------------------------------------------------------
 lib/cordova.js |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-cordova-js/blob/b9dcff46/lib/cordova.js
----------------------------------------------------------------------
diff --git a/lib/cordova.js b/lib/cordova.js
index 5eedc3a..32daed3 100644
--- a/lib/cordova.js
+++ b/lib/cordova.js
@@ -6,7 +6,7 @@ var channel = require('cordova/channel');
 document.addEventListener('DOMContentLoaded', function() {
     channel.onDOMContentLoaded.fire();
 }, false);
-if (document.readyState == 'complete') {
+if (document.readyState == 'complete' || document.readyState == 'interactive') 
{
     channel.onDOMContentLoaded.fire();
 }
 

Reply via email to