Quebre o javascript antes de um redirecionamento de javascript embutido no Chrome

91

Estou visualizando uma página que possui um redirecionamento de javascript embutido ( window.location = "/anotherpage"). Quero carregar a página no Chrome, mas tenho a linha de redirecionamento desativada, para que possa usar a página sem ser redirecionado.

Aqui está o que eu tentei:

  • Ferramentas do desenvolvedor -> Cog -> Geral -> Desativar JavaScript. Carregue a página. Não redireciona (yay!). Mas ainda quero que o restante do javascript da página seja executado, e não foi assim.

  • Digite a URL e clique em Ferramentas do desenvolvedor -> Fontes -> Pausar (F8) bem rápido! Ele ainda não foi redirecionado (yay!) Agora eu quero desativar a linha de redirecionamento antes de retomar, mas essa parte ainda nem foi carregada nas Ferramentas de Desenvolvedor. Vou começar a examinar o código javascript dos outros arquivos até chegar lá ?? Mas assim que eu saio dos outros arquivos javascript, ele imediatamente é redirecionado (doh!).

Isso pode ser feito? Achei que deveria ser fácil desabilitar uma linha de javascript, mas estou perplexo.

Krubo
fonte

Respostas:

142

Ferramentas do desenvolvedor -> Fontes -> Pontos de interrupção do listener de eventos (na barra lateral direita) -> Carregar -> verificar descarregar

Isso fará com que o depurador pare no evento unload que é despachado antes da navegação.

vsevik
fonte
2
Outro obrigado pela resposta útil. Eu estaria interessado em saber por que tantos votos positivos sobre a mensagem "isso não funciona"; isso era um problema com as versões mais antigas do Chrome? Alguém para quem não funcionou pode fornecer mais informações?
Christian Rondeau
8
Fiquei inicialmente muito feliz em ver essa resposta, mas posso confirmar que não funciona para mim (embora tenha marcado o descarregamento conforme sugerido, o redirecionamento da página ainda ocorre e não tenho chance de definir pontos de interrupção nas fontes da página UMA). Talvez tenha a ver com a maneira como a primeira página "redireciona"? No meu caso, a página A (a página cujo javascript estou tentando depurar) executa um POST (via javascript) para a página B.
Emil G
17
funciona bem, o problema é que a pilha de chamadas está vazia, então não é muito útil, já que você não será capaz de ver o que realmente acionou o redirecionamento
Eugene Kuzmenko
8
@EugeneKuzmenko sério, não sei como isso está ajudando alguém
Will P.
1
Isso só funciona se a página tiver um gerenciador unload ou beforeunload no qual o depurador pode parar. Se nenhum manipulador estiver registrado, o depurador não será acionado.
rumpel de
42

Faça o seguinte

  1. Abrir ferramentas de desenvolvedor
  2. Vá para a guia Fontes
  3. Procure pontos de interrupção do listener de eventos
  4. Expandir opção de carga
  5. Aqui, verifique a opção de descarregar

Ponto de interrupção de descarregamento do Chrome

aWebDeveloper
fonte
@TomBrito quando no intervalo beforeunload (que eu tive que usar para desviar de algum paywall idiota de jornal), posso inspecionar elementos. Você não pode inspecionar ao descarregar? Estou no Chrome 71.0.3578.98.
linkD
12

Eu tenho uma biblioteca JS de terceiros, que apresentou uma condição errada para recarregar a página. E a página foi recarregada continuamente por causa disso. Tentei descobrir onde está o código errado.

Eu tentei usar o método "Event Listener Breakpoints", mas como um comentário disse que você não tem rastreamento de pilha em eventos de descarregamento, então é bastante inútil.

A solução que funcionou para mim: criei uma página com uma tag iframe com o atributo sandbox, por exemplo, <iframe sandbox="allow-same-origin allow-scripts allow-popups allow-forms"></iframe>e coloquei meu site nela. Desta forma, erros de segurança ocorrerão dentro do chrome e o console mostra onde o JS tenta acessar o objeto de localização. Você pode clicar nele e ver o código. O melhor é que o Chrome tem um descompressor JS (o botão {} no canto inferior esquerdo da janela de origem), que é inteligente, pode mostrar a linha mesmo após uma impressão bonita, para que você possa vê-la mesmo em JS compactado.

Mais informações sobre a propriedade sandbox: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/iframe#attr-sandbox

Adam Wallner
fonte
Isso só funciona se o código (naquele iframe) usar top.location = "..."notlocation = "..."
mems