Złam javascript przed wbudowanym przekierowaniem javascript w Chrome

94

Przeglądam stronę, która ma wbudowane przekierowanie javascript ( window.location = "/anotherpage"). Chcę załadować stronę w przeglądarce Chrome, ale mam wyłączoną linię przekierowania, więc mogę korzystać ze strony bez przekierowywania.

Oto, czego próbowałem:

  • Narzędzia programistyczne -> Cog -> General -> Disable JavaScript. Załaduj stronę. Nie przekierowuje (yay!). Ale nadal chcę, aby reszta javascript strony działała, a tak się nie stało.

  • Wpisz adres URL, a następnie kliknij Narzędzia programistyczne -> Źródła -> Wstrzymaj (F8) naprawdę szybko! To jeszcze się nie przekierowało (yay!) Teraz chcę wyłączyć linię przekierowania przed wznowieniem, ale ta część nie została jeszcze załadowana do Narzędzi dla programistów. Więc zacznę przechodzić przez kod javascript innych plików, aż tam dotrę? Ale gdy tylko wyjdę z innych plików javascript, natychmiast przekierowuje (doh!).

Czy można to zrobić? Pomyślałem, że powinno być łatwo wyłączyć wiersz JavaScript, ale jestem zaskoczony.

krubo
źródło

Odpowiedzi:

144

Narzędzia deweloperskie -> Źródła -> Punkty przerwania nasłuchiwania zdarzeń (na prawym pasku bocznym) -> Wczytaj -> sprawdź rozładuj

Spowoduje to przerwanie debugera przy zdarzeniu zwolnienia, które jest wysyłane przed nawigacją.

vsevik
źródło
2
Kolejne dzięki za roboczą odpowiedź. Chciałbym usłyszeć, dlaczego tak wiele głosów za przesłaniem „to nie działa”; czy był to problem ze starszymi wersjami Chrome? Czy ktoś, dla kogo to nie zadziałało, może udzielić więcej informacji?
Christian Rondeau,
8
Początkowo byłem bardzo zadowolony, widząc tę ​​odpowiedź, ale mogę potwierdzić, że u mnie nie działa (mimo że sprawdziłem rozładowanie zgodnie z sugestią, przekierowanie strony nadal ma miejsce i nie mam szans ustawić punktów przerwania w źródłach strony ZA). Może ma to związek ze sposobem, w jaki pierwsza strona „przekierowuje”? W moim przypadku strona A (strona, której javascript próbuję debugować) wykonuje POST (przez javascript) na stronie B.
Emil G
17
działa dobrze, problem polega na tym, że stos wywołań jest pusty, więc nie jest to zbyt pomocne, ponieważ nie będziesz w stanie zobaczyć, co faktycznie wywołało przekierowanie
Eugene Kuzmenko
8
@EugeneKuzmenko poważnie, nie wiem, jak to naprawdę pomaga komukolwiek
Will P.,
1
Działa to tylko wtedy, gdy strona ma procedurę obsługi wyładowania lub przed uruchomieniem, na której debuger może się zatrzymać. Jeśli taki program obsługi nie jest zarejestrowany, debugger nie zostanie wyzwolony.
rumpel
43

Wykonaj następujące czynności

  1. Otwórz narzędzia programistyczne
  2. Przejdź do zakładki Źródła
  3. Poszukaj punktów przerwania detektora zdarzeń
  4. Rozwiń opcję Załaduj
  5. Tutaj sprawdź opcję rozładowania

Punkt przerwania wyładowania Chrome

aWebDeveloper
źródło
@TomBrito, gdy jestem na przerwie przed rozładowaniem (której musiałem użyć, aby uniknąć głupiej zapory gazetowej), mogę sprawdzić elementy. Czy nie możesz sprawdzić podczas rozładunku? Korzystam z Chrome 71.0.3578.98.
linkD
12

Mam bibliotekę JS innej firmy, która miała zły warunek ponownego załadowania strony. Z tego powodu strona była stale odświeżana. Próbowałem dowiedzieć się, gdzie jest zły kod.

Próbowałem użyć metody „Event Listener Breakpoints”, ale jako komentarz powiedział, że nie masz śladu stosu w zdarzeniach rozładowania, więc jest to całkiem bezużyteczne.

Roztwór , który pracował dla mnie: I stworzyliśmy stronę z tagu iframe z atrybutu, np piaskownicy <iframe sandbox="allow-same-origin allow-scripts allow-popups allow-forms"></iframe>i umieścić moje miejsce w nim. W ten sposób błędy bezpieczeństwa pojawią się w chrome, a konsola pokaże, gdzie JS próbuje uzyskać dostęp do obiektu lokalizacji. Możesz na nią kliknąć i zobaczyć kod. Najlepsze jest to, że Chrome ma dekompresor JS (przycisk {} w lewym dolnym rogu okna źródłowego), który jest sprytny, może pokazać linię nawet po ładnym wydrukowaniu, więc możesz to zobaczyć nawet w skompresowanym JS.

Więcej informacji o właściwościach piaskownicy: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/iframe#attr-sandbox

Adam Wallner
źródło
Działa to tylko wtedy, gdy kod (w tym iframe) używa top.location = "..."notlocation = "..."
mems