2010-10-14 403 views
23

Tengo un script que quiero ejecutar antes de que la página comience a cargarse. El script verifica el valor de una variable y, en función del valor, redirige al usuario a una nueva página.Cómo ejecutar un jQuery o JavaScript antes Página Iniciar la carga

Puedo verificar con éxito la variable y redireccionar si es necesario, pero la página todavía se carga y muestra la página vacía, pero luego se redirige rápidamente a la otra página. No quiero que se muestre esa página vacía en la página antes del redireccionamiento.

Gracias, Ver

+1

Esto no sería un problema si utilizó un script del lado del servidor (como php) para hacer el redireccionamiento. – Mischa

+0

¿Cómo lo está haciendo en este momento? – harto

Respuesta

6

Quizás esté utilizando:

$(document).ready(function(){ 
    // Your code here 
}); 

probar este lugar:

window.onload = function(){ } 
+0

Sí, estoy usando $ (document) .ready (function() { // Su código aquí }); esta función solamente ¿Hay alguna posibilidad de hacer eso en javascript – Ver

+0

? El código dentro de '$ (documento) .ready()' se ejecuta después de que se lee su página, pero antes de que se terminen de descargar activos adicionales (por ejemplo, imágenes). * Verá * algo en la pantalla antes de que se ejecuten los scripts envueltos en '$ (document) .ready()'. – Blackcoat

6

Si no desea que nada para que aparezca antes de la redirección, entonces Necesitará utilizar algunas secuencias de comandos del lado del servidor para realizar la tarea antes de que se sirva la página. La página ya comenzó a cargarse cuando se ejecuta su Javascript en el lado del cliente.

Si Javascript es su única opción, su mejor opción es hacer que su script sea el primer archivo .js incluido en el documento <head> de su documento.

En lugar de Javascript, recomiendo configurar su lógica de redirección en la configuración del servidor Apache o nginx.

9
<head> 
    <script> 
    if(condition){ 
     window.location = "http://yournewlocation.com"; 
    } 
    </script> 
</head> 
<body> 
    ... 
</body> 

Esto obligará a la comprobación del estado y el cambio de la dirección URL antes de que la página se representa nada nginx. Vale la pena señalar que específicamente querrá hacer esto antes de la llamada a la biblioteca jQuery para que pueda evitar la carga de toda esa biblioteca. Algunos también pueden argumentar que esto estaría en mejores condiciones en un método de envoltura y llamó así que aquí es que el método:

function redirectHandler(condition, url){ 
    if(condition){ 
    window.location = url; 
    }else{ 
    return false; 
    } 
} 

Eso le permitiría comprobar varias condiciones y redirigir a diferentes lugares sobre la base de que:

if(redirectHandler(nologgedin, "/login.php")||redirectHandler(adminuser, "/admin.php")); 

o si sólo necesita que se ejecute una vez y sólo una vez, pero te gusta tener nada en el espacio de nombres global:

(function(condition, url){ 
    if(condition)window.location=url; 
})(!loggedin, "/login.asp"); 
6

no utilice ready (documento) $() sólo hay que poner los s cript directamente en la sección de la cabeza de la página. Las páginas se procesan de arriba abajo para que las cosas de la parte superior se procesen primero.

1

Esto debe hacer el truco:

window.onload = function(event) { 
    event.stopPropagation(true); 
    window.location.href="http://www.google.com"; 
}; 

Buena suerte  ;)

1

Prueba el evento de descarga. El evento de descarga se envía al elemento ventana cuando el usuario navega fuera de la página.

$(window).unload(function() { 
    //do something 
}); 
6

Ocultar el cuerpo con CSS a continuación, mostrar que, después de cargar la página:

CSS:

html { visibility:hidden; } 

Javascript

$(document).ready(function() { 
    document.getElementsByTagName("html")[0].style.visibility = "visible"; 
}); 

La página irá de blanco para mostrar todo el contenido cuando se carga la página, sin flash de contenido, sin ver las imágenes cargadas, etc.

Cuestiones relacionadas