El metodo de Yolson es el mejor.
Aunque el loading se puede hacer con el siguiente truco: poner una imagen o texto que ponga "loading" en una capa (layer).
Y en la etiqueta "<BODY>" utilizar el atributo "onLoad" para hacer que la imagen (o lo que sea) desaparezca, justo cuando la pagina este totalmente cargada.
Código:
<HTML>
<HEAD>
<script language="JavaScript">
<!--
function MM_reloadPage(init) { //reloads the window if Nav4 resized
if (init==true) with (navigator) {if ((appName=="Netscape")&&(parseInt(appVersion)==4)) {
document.MM_pgW=innerWidth; document.MM_pgH=innerHeight; onresize=MM_reloadPage; }}
else if (innerWidth!=document.MM_pgW || innerHeight!=document.MM_pgH) location.reload();
}
MM_reloadPage(true);
// -->
function MM_findObj(n, d) { //v4.0
var p,e,x; if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
if(!(x=d[n])&&d.all) x=d.all[n]; for (e=0;!x&&e<d.forms.length;e++) x=d.forms[e][n];
for(e=0;!x&&d.layers&&e<d.layers.length;e++) x=MM_findObj(n,d.layers[e].document);
if(!x && document.getElementById) x=document.getElementById(n); return x;
}
function MM_showHideLayers() { //v3.0
var i,p,v,obj,args=MM_showHideLayers.arguments;
for (e=0; e<(args.length-2); e+=3) if ((obj=MM_findObj(args[e]))!=null) { v=args[e+2];
if (obj.style) { obj=obj.style; v=(v=='show')?'visible':(v='hide')?'hidden':v; }
obj.visibility=v; }
}
function quitarLoading() {
// aqui utilizo la porqueria de codigo que
// crea Dreamweaver, pero se podria poner
// uno mucho mejor y mas simple
// (no tengo tiempo, que lo haga otro ;)
MM_showHideLayers('Layer1','','hide')
}
//-->
</script>
</HEAD>
<BODY onload=quitarLoading()>
<div id="Layer1" style="position:absolute; left:254px; top:87px; width:325px; height:77px; z-index:1">cargando
pagina </div>
<BR>bla blabla
<BR> mas blabla
</BODY>
</HTML>