tags:

views:

152

answers:

3

This is a crossbrowser window.onload script, I want to add a message, when the page loads (<div id="message">Loading, please wait</div>), and it must disappear when page finished loading. How can I do that? Please help.

function init() {
    if (arguments.callee.done) return;
    arguments.callee.done = true;
};

if (document.addEventListener) {
    document.addEventListener("DOMContentLoaded", init, false);
}

/*@cc_on @*/
/*@if (@_win32)
document.write("<script id=\"__ie_onload\" defer=\"defer\" src=\"javascript:void(0)\"><\/script>");
var script = document.getElementById("__ie_onload");
script.onreadystatechange = function() {
    if (this.readyState == "complete") {
    init();
    }
};
/*@end @*/

if (/WebKit/i.test(navigator.userAgent)) {
    var _timer = setInterval(function() {
    if (/loaded|complete/.test(document.readyState)) {
        clearInterval(_timer);
        init();
    }
    }, 10);
}

window.onload = init;
+1  A: 

The event you are catching is the one triggered when the DOM has finished loading, the next step in the loading is the body.onload (when all the images and body scripts are loaded).

init(); // show the div

window.onload = function(){
    // finished loading, hide the div
}
Fabien Ménager
+2  A: 

Just load the page with the loading DIV visible from the beginning. Hide it at the end of the init function...?

Ropstah
So don't 'add' the DIV in javascript, make sure it's visible and 'hide' it in javascript when it's done...
Ropstah
And be sure to load it early in the document so the user doesn't have to wait for it to popup.
Jonathan Sampson
+2  A: 

The easiest way is to have a div in the DOM that you hide on the load event:

<html>
    <body>
        <div id="loading">The page is loading, please wait</div>
        [...]

        <script>
            window.onload = function () {
                document.getElementById('loading').style.display = "none";
            }
        </script>
    </body>
</html>

To ensure that this always works, even when the user has JavaScript disabled:

<html>
    <body>
        <script>
            document.write('<div id="loading">The page is loading, please wait</div>');
        </script>
        [...]
        <script>
            window.onload = function () {
                document.getElementById('loading').style.display = "none";
            }
        </script>
    </body>
</html>
PatrikAkerstrand
this works! thousands thanks, Machine :-)
Mike