Unterbrechen Sie Javascript, bevor Sie eine Inline-Javascript-Umleitung in Chrome durchführen

91

Ich sehe eine Seite mit einer Inline-Javascript-Umleitung ( window.location = "/anotherpage"). Ich möchte die Seite in Chrome laden, aber die Umleitungszeile deaktiviert haben, damit ich die Seite verwenden kann, ohne umgeleitet zu werden.

Folgendes habe ich versucht:

  • Entwicklertools -> Zahnrad -> Allgemein -> JavaScript deaktivieren. Laden Sie die Seite. Es wird nicht umgeleitet (yay!). Aber ich möchte immer noch, dass der Rest des Javascript der Seite ausgeführt wird, und das hat es nicht.

  • Geben Sie die URL ein und klicken Sie dann ganz schnell auf Entwicklertools -> Quellen -> Pause (F8)! Es wurde noch nicht umgeleitet (yay!) Jetzt möchte ich die Umleitungszeile vor dem Aufheben der Pause deaktivieren, aber dieser Teil wurde noch nicht einmal in die Entwicklertools geladen. Also werde ich anfangen, den Javascript-Code der anderen Dateien durchzugehen, bis ich dort bin? Aber sobald ich aus den anderen Dateien Javascript heraus trete, leitet es sofort weg (doh!).

Kann das gemacht werden? Ich dachte, es sollte einfach sein, eine Zeile Javascript zu deaktivieren, aber ich bin ratlos.

krubo
quelle

Antworten:

142

Entwicklertools -> Quellen -> Ereignis-Listener-Haltepunkte (in der rechten Seitenleiste) -> Laden -> Entladen überprüfen

Dadurch wird der Debugger beim Entladen unterbrochen, das vor der Navigation ausgelöst wird.

vsevik
quelle
2
Nochmals vielen Dank für die funktionierende Antwort. Es würde mich interessieren, warum so viele positive Stimmen für die Nachricht "Das funktioniert nicht" vorliegen. War dies ein Problem mit älteren Chrome-Versionen? Kann jemand, für den es nicht funktioniert hat, weitere Informationen bereitstellen?
Christian Rondeau
8
Ich habe mich anfangs sehr über diese Antwort gefreut, kann aber bestätigen, dass sie bei mir nicht funktioniert (obwohl ich das Entladen wie vorgeschlagen aktiviert habe, findet die Seitenumleitung weiterhin statt und ich habe keine Möglichkeit, Haltepunkte in den Seitenquellen festzulegen EIN). Vielleicht hat es damit zu tun, wie die erste Seite "umleitet"? In meinem Fall führt Seite A (die Seite, deren Javascript ich zu debuggen versuche) einen POST (über Javascript) zu Seite B durch.
Emil G
17
es funktioniert in Ordnung, das Problem ist, dass der Aufrufstapel leer ist, daher ist es nicht wirklich hilfreich, da Sie nicht sehen können, was die Umleitung tatsächlich ausgelöst hat
Eugene Kuzmenko
8
@ EugeneKuzmenko im Ernst, ich weiß nicht, wie dies tatsächlich jemandem hilft
Will P.
1
Dies funktioniert nur, wenn die Seite über einen Handler zum Entladen oder Vorentladen verfügt, an dem der Debugger anhalten kann. Wenn kein solcher Handler registriert ist, wird der Debugger nicht ausgelöst.
Rumpel
42

Mach Folgendes

  1. Öffnen Sie die Entwicklertools
  2. Gehen Sie zur Registerkarte Quellen
  3. Suchen Sie nach Ereignis-Listener-Haltepunkten
  4. Erweitern Sie die Option Laden
  5. Hier prüfen Entladen Option

Haltepunkt zum Entladen von Chrome

aWebDeveloper
quelle
@ TomBrito Wenn ich mich in der Pause vor dem Entladen befinde (mit der ich einer albernen Zeitungs-Paywall ausweichen musste), kann ich Elemente inspizieren. Können Sie beim Entladen nicht inspizieren? Ich bin auf Chrome 71.0.3578.98.
LinkD
Entspricht der obigen Antwort und funktioniert selten.
ViliusL
12

Ich habe eine JS-Bibliothek eines Drittanbieters, die eine falsche Bedingung zum erneuten Laden der Seite hatte. Aus diesem Grund wurde die Seite kontinuierlich neu geladen. Ich habe versucht herauszufinden, wo der falsche Code ist.

Ich habe versucht, die "Event Listener Breakpoints" -Methode zu verwenden, aber wie ein Kommentar sagte, haben Sie beim Entladen von Ereignissen keine Stapelverfolgung, daher ist dies ziemlich nutzlos.

Die Lösung, die für mich funktioniert hat: Ich habe eine Seite mit einem Iframe-Tag mit Sandbox-Attribut erstellt, z<iframe sandbox="allow-same-origin allow-scripts allow-popups allow-forms"></iframe> und meine Site darin abgelegt. Auf diese Weise treten Sicherheitsfehler in Chrome auf und die Konsole zeigt an, wo der JS versucht, auf das Standortobjekt zuzugreifen. Sie können darauf klicken und den Code sehen. Das Beste ist, Chrome hat einen JS-Dekomprimierer (die Schaltfläche {} unten links im Quellfenster), der clever ist und die Linie auch nach dem hübschen Drucken anzeigen kann, sodass Sie sie auch in komprimiertem JS sehen können.

Weitere Informationen zur Sandbox-Eigenschaft: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/iframe#attr-sandbox

Adam Wallner
quelle
Dies funktioniert nur, wenn der Code (in diesem Iframe) top.location = "..."notlocation = "..."
mems