Romper javascript antes de una redirección de javascript en línea en Chrome

91

Estoy viendo una página que tiene una redirección de JavaScript en línea ( window.location = "/anotherpage"). Quiero cargar la página en Chrome pero tengo la línea de redireccionamiento deshabilitada, por lo que puedo usar la página sin ser redirigido.

Esto es lo que probé:

  • Herramientas de desarrollo -> Cog -> General -> Deshabilitar JavaScript. Cargue la página. No redirige (¡yay!). Pero todavía quiero que se ejecute el resto del javascript de la página, y no lo ha hecho.

  • Escriba la URL, luego haga clic en Herramientas de desarrollo -> Fuentes -> Pausar (F8) muy rápido. Aún no se ha redirigido (¡yay!) Ahora quiero deshabilitar la línea de redireccionamiento antes de cancelar la pausa, pero esa parte ni siquiera se ha cargado aún en las Herramientas de desarrollo. Entonces, ¿comenzaré a recorrer los otros archivos de código javascript hasta que llegue allí? Pero tan pronto como salgo de los otros archivos javascript, inmediatamente se redirige (¡doh!).

Se puede hacer esto? Pensé que debería ser fácil deshabilitar una línea de javascript, pero estoy perplejo.

Krubo
fuente

Respuestas:

142

Herramientas de desarrollo -> Fuentes -> Puntos de interrupción del oyente de eventos (en la barra lateral derecha) -> Cargar -> verificar descarga

Esto hará que el depurador se interrumpa en el evento de descarga que se envía antes de la navegación.

vsevik
fuente
2
Otro agradecimiento por la respuesta funcional. Me interesaría saber por qué tantos votos positivos sobre el mensaje "esto no funciona"; ¿Fue esto un problema con las versiones anteriores de Chrome? ¿Puede alguien para quien no funcionó proporcionar más información?
Christian Rondeau
8
Inicialmente estaba muy feliz de ver esta respuesta, pero puedo confirmar que no funciona para mí (a pesar de que verifiqué la descarga como se sugirió, la redirección de la página aún se lleva a cabo y no tengo la oportunidad de establecer puntos de interrupción en las fuentes de la página UNA). ¿Quizás tenga que ver con la forma en que la primera página "redirecciona"? En mi caso, la página A (la página cuyo javascript estoy tratando de depurar) realiza una POST (a través de javascript) a la página B.
Emil G
17
funciona bien, el problema es que la pila de llamadas está vacía, por lo que no es realmente útil, ya que no podrá ver qué desencadenó realmente la redirección
Eugene Kuzmenko
8
@EugeneKuzmenko en serio, no sé cómo esto realmente ayuda a alguien
Will P.
1
Esto solo funciona si la página tiene un controlador de descarga o antes de descarga en el que el depurador puede detenerse. Si no se registra dicho controlador, el depurador no se activará.
rumpel
42

Haz lo siguiente

  1. Abrir herramientas de desarrollo
  2. Ir a la pestaña Fuentes
  3. Busque puntos de interrupción de escucha de eventos
  4. Expandir la opción de carga
  5. Aquí verifique la opción de descarga

Punto de interrupción de descarga de Chrome

aWebDeveloper
fuente
@TomBrito cuando estoy en la pausa antes de la descarga (que tuve que usar para esquivar un muro de pago tonto del periódico), puedo inspeccionar elementos. ¿No se puede inspeccionar cuando se descarga? Estoy en Chrome 71.0.3578.98.
linkD
12

Tengo una biblioteca JS de terceros, que ha tenido una condición incorrecta para volver a cargar la página. Y la página se ha recargado continuamente debido a esto. Traté de encontrar dónde está el código incorrecto.

Intenté usar el método "Event Listener Breakpoints", pero como decía un comentario que no tiene seguimiento de pila en los eventos de descarga, por lo que es bastante inútil.

La solución que me ha funcionado: creé una página con una etiqueta iframe con atributo sandbox, por ejemplo<iframe sandbox="allow-same-origin allow-scripts allow-popups allow-forms"></iframe> y puse mi sitio en ella. De esta manera, se producirán errores de seguridad dentro de Chrome y la consola muestra dónde el JS intenta acceder al objeto de ubicación. Puede hacer clic en él y ver el código. Lo mejor es que Chrome tiene un descompresor JS (el botón {} en la parte inferior izquierda de la ventana de la fuente), que es inteligente, puede mostrar la línea incluso después de una impresión bonita, por lo que puede verla incluso en JS comprimido.

Más información sobre la propiedad sandbox: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/iframe#attr-sandbox

Adam Wallner
fuente
Esto solo funciona si el código (en ese iframe) top.location = "..."no se usalocation = "..."
mems