103 lines
3.6 KiB
JavaScript
103 lines
3.6 KiB
JavaScript
/*
|
|
DocumentReady Plug-in
|
|
|
|
This plugin loads SWFUpload as soon as the document is ready. You should not load SWFUpload inside window.onload using this plugin.
|
|
You can also chain other functions by calling SWFUpload.DocumentReady(your function).
|
|
|
|
Warning: Embedded Ads or other scripts that overwrite window.onload or use their own document ready functions may interfer with this plugin. You
|
|
should not set window.onload when using this plugin.
|
|
|
|
Usage Example:
|
|
|
|
var swfu = new SWFUpload(your settings object);
|
|
SWFUpload.DocumentReady(function () { alert('Document Ready!'; });
|
|
|
|
*/
|
|
|
|
var SWFUpload;
|
|
if (typeof(SWFUpload) === "function") {
|
|
// Override iniSWFUpload so SWFUpload gets inited when the document is ready rather than immediately
|
|
SWFUpload.prototype.initSWFUpload = function (old_initSWFUpload) {
|
|
return function (init_settings) {
|
|
var self = this;
|
|
if (typeof(old_initSWFUpload) === "function") {
|
|
SWFUpload.DocumentReady(function () {
|
|
old_initSWFUpload.call(self, init_settings);
|
|
});
|
|
}
|
|
}
|
|
|
|
}(SWFUpload.prototype.initSWFUpload);
|
|
|
|
|
|
// The DocumentReady function adds the passed in function to
|
|
// the functions that will be executed when the document is ready/loaded
|
|
SWFUpload.DocumentReady = function (fn) {
|
|
// Add the function to the chain
|
|
SWFUpload.DocumentReady.InternalOnloadChain = function (previous_link_fn) {
|
|
return function () {
|
|
if (typeof(previous_link_fn) === "function") {
|
|
previous_link_fn();
|
|
}
|
|
fn();
|
|
};
|
|
}(SWFUpload.DocumentReady.InternalOnloadChain);
|
|
};
|
|
SWFUpload.DocumentReady.InternalOnloadChain = null;
|
|
SWFUpload.DocumentReady.Onload = function () {
|
|
// Execute the onload function chain
|
|
if (typeof(SWFUpload.DocumentReady.InternalOnloadChain) === "function") {
|
|
SWFUpload.DocumentReady.InternalOnloadChain();
|
|
}
|
|
};
|
|
SWFUpload.DocumentReady.SetupComplete = false;
|
|
|
|
|
|
/* ********************************************
|
|
This portion of the code gets executed as soon it is loaded.
|
|
It binds the proper event for executing JavaScript is
|
|
early as possible. This is a per browser function and so
|
|
some browser sniffing is used.
|
|
|
|
This solution still has the "exposed" issue (See the Global Delegation section at http://peter.michaux.ca/article/553 )
|
|
|
|
Base solution from http://dean.edwards.name/weblog/2006/06/again/ and http://dean.edwards.name/weblog/2005/09/busted/
|
|
******************************************** */
|
|
if (!SWFUpload.DocumentReady.SetupComplete) {
|
|
// for Internet Explorer (using conditional comments)
|
|
/*@cc_on @*/
|
|
/*@if (@_win32)
|
|
document.write("<script id=__ie_onload defer src=javascript:void(0)><\/script>");
|
|
var script = document.getElementById("__ie_onload");
|
|
script.onreadystatechange = function() {
|
|
if (this.readyState == "complete") {
|
|
SWFUpload.DocumentReady.Onload(); // call the onload handler
|
|
}
|
|
};
|
|
SWFUpload.DocumentReady.SetupComplete = true;
|
|
/*@end @*/
|
|
}
|
|
|
|
if (!SWFUpload.DocumentReady.SetupComplete && /WebKit/i.test(navigator.userAgent)) { // sniff
|
|
var _timer = setInterval(function() {
|
|
if (/loaded|complete/.test(document.readyState)) {
|
|
clearInterval(_timer);
|
|
SWFUpload.DocumentReady.Onload(); // call the onload handler
|
|
}
|
|
}, 10);
|
|
SWFUpload.DocumentReady.SetupComplete = true;
|
|
}
|
|
|
|
/* for Mozilla */
|
|
if (!SWFUpload.DocumentReady.SetupComplete && document.addEventListener) {
|
|
document.addEventListener("DOMContentLoaded", SWFUpload.DocumentReady.Onload, false);
|
|
SWFUpload.DocumentReady.SetupComplete = true;
|
|
}
|
|
|
|
/* for other browsers */
|
|
if (!SWFUpload.DocumentReady.SetupComplete) {
|
|
window.onload = SWFUpload.DocumentReady.Onload;
|
|
SWFUpload.DocumentReady.SetupComplete = true;
|
|
}
|
|
}
|