Rompre javascript avant une redirection javascript intégrée dans Chrome

91

Je regarde une page qui a une redirection javascript en ligne ( window.location = "/anotherpage"). Je souhaite charger la page dans Chrome, mais la ligne de redirection est désactivée afin de pouvoir utiliser la page sans être redirigé.

Voici ce que j'ai essayé:

  • Outils de développement -> Cog -> Général -> Désactiver JavaScript. Chargez la page. Il ne redirige pas (ouais!). Mais je veux toujours que le reste du javascript de la page s'exécute, et ce n'est pas le cas.

  • Tapez l'URL, puis cliquez sur Outils de développement -> Sources -> Pause (F8) très rapidement! Il n'a pas encore redirigé (ouais!) Maintenant, je veux désactiver la ligne de redirection avant de la réactiver, mais cette partie n'a même pas encore été chargée dans les outils de développement. Je vais donc commencer à parcourir les autres fichiers de code javascript jusqu'à ce que j'y arrive ?? Mais dès que je sors des autres fichiers javascript, il redirige immédiatement (doh!).

Cela peut-il être fait? Je pensais qu'il devrait être facile de désactiver une ligne de javascript, mais je suis perplexe.

Krubo
la source

Réponses:

142

Developer Tools -> Sources -> Event Listener Breakpoints (sur la barre latérale droite) -> Load -> check unload

Cela rendra le débogueur interrompu lors de l'événement de déchargement qui est distribué avant la navigation.

vsevik
la source
2
Un autre merci pour la réponse de travail. Je serais intéressé de savoir pourquoi tant de votes positifs sur le message «cela ne fonctionne pas»; était-ce un problème avec les anciennes versions de Chrome? Quelqu'un pour qui cela n'a pas fonctionné peut-il fournir plus d'informations?
Christian Rondeau
8
J'étais au départ très heureux de voir cette réponse mais je peux confirmer que cela ne fonctionne pas pour moi (même si j'ai coché déchargement comme suggéré, la redirection de page a toujours lieu et je n'ai aucune chance de définir des points d'arrêt dans les sources de la page UNE). Peut-être que cela a à voir avec la façon dont la première page "redirige"? Dans mon cas, la page A (la page dont je tente de déboguer le javascript) effectue un POST (via javascript) vers la page B.
Emil G
17
cela fonctionne bien, le problème est que la pile d'appels est vide, donc ce n'est pas vraiment utile, car vous ne pourrez pas voir ce qui a réellement déclenché la redirection
Eugene Kuzmenko
8
@EugeneKuzmenko sérieusement, je ne sais pas comment cela aide réellement quelqu'un
Will P.
1
Cela ne fonctionne que si la page a un gestionnaire de déchargement ou avant déchargement auquel le débogueur peut s'arrêter. Si aucun gestionnaire de ce type n'est enregistré, le débogueur ne se déclenchera pas.
rumpel
42

Faites ce qui suit

  1. Ouvrir les outils de développement
  2. Aller à l' onglet Sources
  3. Rechercher les points d'arrêt de l'écouteur d'événements
  4. Développer l' option de chargement
  5. Ici, vérifiez l' option de déchargement

Point d'arrêt de déchargement de Chrome

aWebDeveloper
la source
@TomBrito lors de la pause avant déchargement (que j'ai dû utiliser pour esquiver un mur de paiement de journal idiot), je peux inspecter des éléments. Ne pouvez-vous pas inspecter lors du déchargement? Je suis sur Chrome 71.0.3578.98.
linkD
12

J'ai une bibliothèque JS tierce, qui a eu une mauvaise condition pour recharger la page. Et la page a été rechargée en permanence à cause de cela. J'ai essayé de trouver où se trouve le mauvais code.

J'ai essayé d'utiliser la méthode "Event Listener Breakpoints", mais comme un commentaire l'a dit, vous n'avez pas de trace de pile dans les événements de déchargement, donc c'est assez inutile.

La solution qui a fonctionné pour moi: j'ai créé une page avec une balise iframe avec un attribut sandbox, par exemple <iframe sandbox="allow-same-origin allow-scripts allow-popups allow-forms"></iframe>et y ai mis mon site. De cette façon, des erreurs de sécurité se produiront dans Chrome et la console montre où le JS tente d'accéder à l'objet de localisation. Vous pouvez cliquer dessus et voir le code. Le meilleur est que Chrome a un décompresseur JS (le bouton {} en bas à gauche de la fenêtre source), qui est intelligent, peut afficher la ligne même après une jolie impression, donc vous pouvez la voir même en JS compressé.

Plus d'informations sur la propriété sandbox: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/iframe#attr-sandbox

Adam Wallner
la source
Cela ne fonctionne que si le code (dans cette iframe) n'utilise top.location = "..."paslocation = "..."
mems