mirror of
https://github.com/zhigang1992/angular.js.git
synced 2026-01-12 17:12:34 +08:00
fix(jqLite): revert the #ready() optimization until jQuery does the same
The change unfortunatelly makes us incompatible with jQuery which always falls back to onLoad. Not falling back to onLoad is a possible breaking change because if Angular was added to the document during DOMContentLoaded document.readyState at this point is 'interactive' which we'd need to add to our check, but more importantly if more scripts are added during DOMContentLoaded these won't be loaded before we bootstrap, which can cause angular modules not to be found during bootstrap. This load ordering issues is really just a cornercase that should be handled via manual bootstrap, but until jQuery has the same behavior we shouldn't do something else.
This commit is contained in:
@@ -454,11 +454,24 @@ function jqLiteRemove(element, keepData) {
|
||||
//////////////////////////////////////////
|
||||
var JQLitePrototype = JQLite.prototype = {
|
||||
ready: function(fn) {
|
||||
// check if document already is loaded
|
||||
var fired = false;
|
||||
|
||||
function trigger() {
|
||||
if (fired) return;
|
||||
fired = true;
|
||||
fn();
|
||||
}
|
||||
|
||||
// check if document is already loaded
|
||||
if (document.readyState === 'complete'){
|
||||
setTimeout(fn);
|
||||
setTimeout(trigger);
|
||||
} else {
|
||||
this.on('DOMContentLoaded', fn);
|
||||
this.on('DOMContentLoaded', trigger); // works for modern browsers and IE9
|
||||
// we can not use jqLite since we are not done loading and jQuery could be loaded later.
|
||||
// jshint -W064
|
||||
JQLite(window).on('load', trigger); // fallback to window.onload for others
|
||||
// jshint +W064
|
||||
this.on('DOMContentLoaded', trigger);
|
||||
}
|
||||
},
|
||||
toString: function() {
|
||||
|
||||
Reference in New Issue
Block a user