/
domready.js
58 lines (56 loc) · 1.72 KB
/
domready.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
/**
* Non-plugin implementation of cross-browser DOM ready event
* Based on OzJS's built-in module -- 'finish'
*
* using AMD (Asynchronous Module Definition) API with OzJS
* see http://ozjs.org for details
*
* Copyright (C) 2010-2012, Dexter.Yy, MIT License
* vim: et:ts=4:sw=4:sts=4
*/
define("mo/domready", ["finish"], function(finish){
var loaded,
w = this,
doc = w.document,
ADD = "addEventListener",
IEADD = "attachEvent",
READY = "DOMContentLoaded",
CHANGE = "onreadystatechange";
if (doc.readyState === "complete") {
setTimeout(finish, 1);
} else {
if (doc[ADD]){
loaded = function(){
doc.removeEventListener("READY", loaded, false);
finish();
};
doc[ADD](READY, loaded, false);
w[ADD]("load", finish, false);
} else if (doc[IEADD]) {
loaded = function(){
if (doc.readyState === "complete") {
doc.detachEvent(CHANGE, loaded);
finish();
}
};
doc[IEADD](CHANGE, loaded);
w[IEADD]("load", finish);
var toplevel = false;
try {
toplevel = w.frameElement == null;
} catch(e) {}
if (doc.documentElement.doScroll && toplevel) {
var check = function(){
try {
doc.documentElement.doScroll("left");
} catch(e) {
setTimeout(check, 1);
return;
}
finish();
};
check();
}
}
}
});