1
|
// add event cross browser
|
2
|
function addEvent(elem, event, fn) {
|
3
|
if (elem.addEventListener) {
|
4
|
elem.addEventListener(event, fn, false);
|
5
|
} else {
|
6
|
elem.attachEvent("on" + event, function() {
|
7
|
// set the this pointer same as addEventListener when fn is called
|
8
|
return(fn.call(elem, window.event));
|
9
|
});
|
10
|
}
|
11
|
}
|
12
|
|
13
|
|
14
|
var logs = [];
|
15
|
var eventSet = false;
|
16
|
var loaded = false;
|
17
|
function log(str) {
|
18
|
|
19
|
if (loaded) {
|
20
|
output(str);
|
21
|
} else {
|
22
|
logs.push(str);
|
23
|
}
|
24
|
|
25
|
function output(str) {
|
26
|
var o = document.getElementById("log");
|
27
|
var div = document.createElement("div");
|
28
|
div.appendChild(document.createTextNode(str));
|
29
|
o.appendChild(div);
|
30
|
}
|
31
|
|
32
|
if (!eventSet) {
|
33
|
eventSet = true;
|
34
|
addEvent(window, "load", function() {
|
35
|
loaded = true;
|
36
|
for (var i = 0; i < logs.length; i++) {
|
37
|
output(logs[i]);
|
38
|
}
|
39
|
logs = [];
|
40
|
});
|
41
|
}
|
42
|
}
|
43
|
|
44
|
(function(funcName, baseObj) {
|
45
|
// The public function name defaults to window.domReady
|
46
|
// but you can pass in your own object and own function name and those will be used
|
47
|
// if you want to put them in a different namespace
|
48
|
funcName = funcName || "domReady";
|
49
|
baseObj = baseObj || window;
|
50
|
var readyList = [];
|
51
|
var readyFired = false;
|
52
|
var readyEventHandlersInstalled = false;
|
53
|
|
54
|
// call this when the document is ready
|
55
|
// this function protects itself against being called more than once
|
56
|
function ready() {
|
57
|
if (!readyFired) {
|
58
|
// this must be set to true before we start calling callbacks
|
59
|
readyFired = true;
|
60
|
for (var i = 0; i < readyList.length; i++) {
|
61
|
// if a callback here happens to add new ready handlers,
|
62
|
// the domReady() function will see that it already fired
|
63
|
// and will schedule the callback to run right after
|
64
|
// this event loop finishes so all handlers will still execute
|
65
|
// in order and no new ones will be added to the readyList
|
66
|
// while we are processing the list
|
67
|
readyList[i].fn.call(window, readyList[i].ctx);
|
68
|
}
|
69
|
// allow any closures held by these functions to free
|
70
|
readyList = [];
|
71
|
}
|
72
|
}
|
73
|
|
74
|
function readyStateChange() {
|
75
|
if ( document.readyState === "complete" ) {
|
76
|
ready();
|
77
|
}
|
78
|
}
|
79
|
|
80
|
// This is the one public interface
|
81
|
// domReady(fn, context);
|
82
|
// the context argument is optional - if present, it will be passed
|
83
|
// as an argument to the callback
|
84
|
baseObj[funcName] = function(callback, context) {
|
85
|
// if ready has already fired, then just schedule the callback
|
86
|
// to fire asynchronously, but right away
|
87
|
if (readyFired) {
|
88
|
setTimeout(function() {callback(context);}, 1);
|
89
|
return;
|
90
|
} else {
|
91
|
// add the function and context to the list
|
92
|
readyList.push({fn: callback, ctx: context});
|
93
|
}
|
94
|
// if document already ready to go, schedule the ready function to run
|
95
|
if (document.readyState === "complete") {
|
96
|
setTimeout(ready, 1);
|
97
|
} else if (!readyEventHandlersInstalled) {
|
98
|
// otherwise if we don't have event handlers installed, install them
|
99
|
if (document.addEventListener) {
|
100
|
// first choice is DOMContentLoaded event
|
101
|
document.addEventListener("DOMContentLoaded", ready, false);
|
102
|
// backup is window load event
|
103
|
window.addEventListener("load", ready, false);
|
104
|
} else {
|
105
|
// must be IE
|
106
|
document.attachEvent("onreadystatechange", readyStateChange);
|
107
|
window.attachEvent("onload", ready);
|
108
|
}
|
109
|
readyEventHandlersInstalled = true;
|
110
|
}
|
111
|
}
|
112
|
})("domReady", window);
|
113
|
|
114
|
function confirm_link(message, url) {
|
115
|
if(confirm(message)) location.href = url;
|
116
|
}
|
117
|
|
118
|
|
119
|
/**
|
120
|
*
|
121
|
// test basic functionality
|
122
|
domReady(function() {
|
123
|
document.body.appendChild(document.createTextNode("Hello Text 1"));
|
124
|
// test adding new domReady handler from a domReady callback
|
125
|
domReady(function() {
|
126
|
document.body.appendChild(document.createTextNode(", Hello Text 2"));
|
127
|
});
|
128
|
});
|
129
|
|
130
|
// test finding an ID in the document
|
131
|
domReady(function() {
|
132
|
document.getElementById("test").innerHTML = "Hello ID";
|
133
|
});
|
134
|
|
135
|
// test calling domReady after window load and
|
136
|
// domReady has already fired
|
137
|
addEvent(window, "load", function() {
|
138
|
setTimeout(function() {
|
139
|
document.body.appendChild(document.createTextNode(", Hello Text 2.5"));
|
140
|
|
141
|
domReady(function(arg) {
|
142
|
document.body.appendChild(document.createTextNode(arg));
|
143
|
}, ", Hello Text 3");
|
144
|
}, 1);
|
145
|
});
|
146
|
})();
|
147
|
*/
|