19

Tengo el siguiente código de redireccionamiento de JavaScript seguido de un código más.¿Qué le sucede al código después de un redireccionamiento de JavaScript (configuración window.location.href)?

window.location.href = '/someurl'; 
alert('hello'); 
alert('hello again'); 

Esto provoca una incoherencia en el navegador.

En firefox, la primera alerta es visible por una fracción de segundo justo antes de ser redirigido. La segunda alerta no es visible en absoluto.

En Chrome, aparecerán ambas alertas, y la redirección solo se produce después de hacer clic en Aceptar para ambas alertas.

¿Hay algún concepto de qué sucede con el código después de la redirección que puede resolver estas diferencias? Si la redirección es asincrónica, ¿qué está haciendo Chrome? Me gustaría entender lo que está sucediendo para poder determinar qué hacer en un escenario más complicado donde una redirección está enterrada profundamente en algunas devoluciones de llamada y otra lógica.

+1

¿Por qué le gustaría hacer algo después de una redirección? – Musa

+0

Todo dependerá del tiempo: una vez que cambie la ubicación, no puede confiar en cuánto tiempo le tomará procesar/procesar/etc. –

+0

@Musa En realidad, no quiero hacer nada después de la redirección, por lo que surgió esta pregunta. Por ejemplo, si se supone que el redireccionamiento ocurre en una devolución de llamada activada desde el código de otra biblioteca, la biblioteca podría ejecutar otras cosas después de que la biblioteca llame a mi devolución de llamada. Pero si solo quiero redirigir la página sin ejecutar esa otra cosa, es posible que deba hacer algo para evitar que continúe de forma normal, dependiendo de lo que los navegadores estén intentando hacer. – user1385729

Respuesta

10

El navegador intentará ejecutar el código después de window.location.href = 'url' hasta que la página va a la siguiente dirección web, por lo que el número de líneas de código que se ejecutarán depende de la velocidad del navegador

+0

Gracias, esto parece plausible. Estoy tratando de probar esto agregando un bucle de ejecución larga después de la redirección. Si fuera una cuestión de velocidad, ¿no redirigirían los navegadores a puntos aleatorios durante el ciclo? Tanto Chrome como Firefox parecen ejecutar todo el código sin importar qué bucle contenga (a menos que haya una alerta en el ciclo, en cuyo caso Firefox va a la redirección en ese punto). No estoy seguro de si la prueba de lazo largo es la mejor prueba ... – user1385729

+0

Tienes razón. Tal vez no sea la velocidad, sino la prioridad de cada función de JavaScript –

+0

@DaniloValente ¿Tiene algún recurso para confirmar esto? –

16

La sesión Javascript tendrá que luchar para continúa su misión frente a la perdición inminente. Codificar de esta manera se considera impredecible. ... y cruel.

+1

Creo que esta es la mejor respuesta. El comportamiento no está definido. – styfle

+1

+1000 para usted señor. – Houssni

Cuestiones relacionadas