Yo en esos casos uso una función AJAX muy corta, lo que hace es cargar la página de destino en un contenedor oculto, solo una vez que la pagina se ha cargado completamente (estado http de nivel 4 (cargado)) se muestra.
El efecto es bastante agradable a la vista, no se nota la carga ni ese flash blanco que hay entre la carga de una página y otra :)
Código HTML:
Ver original<script language="javascript"> function enlace(http) {
var LINK_xmlhttp = false;
try { LINK_xmlhttp = new ActiveXObject("Msxml2.XMLHTTP"); }
catch (e) { try { LINK_xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); }
catch (e) { try { LINK_xmlhttp = new XMLHttpRequest(); }
catch (e) { LINK_xmlhttp = false; }}}
if (!LINK_xmlhttp) return null;
LINK_xmlhttp.open("GET", http, true);
LINK_xmlhttp.onreadystatechange = function() {
if (LINK_xmlhttp.readyState == 4) document.body.innerHTML=LINK_xmlhttp.responseText + ' ';
}
LINK_xmlhttp.send(null);
return false;
}
<a href="javascript:;" onclick="enlace('index.php');">un enlace
</a>
la función enlace() puedes copiarla en un archivo .js independiente y llamarla desde todas tus páginas.
nota que el enlace tiene el evento href como una llamada a javascript vacía, esto hace que el link siga pareciendo un link normal, sin embargo al hacerle clic se invocará el evento "onclick" que es el que llama a la función enlace.
Puedes hacer envío de variables GET sin problema con este metodo, por ejemplo: index.htm?var1=val1