Разбить javascript перед встроенным перенаправлением javascript в Chrome

94

Я просматриваю страницу со встроенным перенаправлением javascript ( window.location = "/anotherpage"). Я хочу загрузить страницу в Chrome, но у меня отключена строка перенаправления, поэтому я могу использовать страницу без перенаправления.

Вот что я пробовал:

  • Инструменты разработчика -> Cog -> Общие -> Отключить JavaScript. Загрузите страницу. Он не перенаправляет (ура!). Но я все еще хочу, чтобы остальная часть javascript страницы работала, а этого не произошло.

  • Введите URL-адрес, затем нажмите Инструменты разработчика -> Источники -> Пауза (F8) очень быстро! Он еще не перенаправлен (ура!). Теперь я хочу отключить строку перенаправления перед снятием с паузы, но эта часть еще даже не загружена в Инструменты разработчика. Так что я начну переходить через код javascript других файлов, пока не доберусь туда ?? Но как только я выхожу из других файлов javascript, он сразу же перенаправляется (уф!).

Это можно сделать? Я думал, что будет легко отключить строку javascript, но я в тупике.

крубо
источник

Ответы:

144

Инструменты разработчика -> Источники -> Точки останова прослушивателя событий (на правой боковой панели) -> Загрузить -> проверить выгрузку

Это приведет к остановке отладчика при событии выгрузки, которое отправляется перед переходом.

всевик
источник
2
Еще спасибо за рабочий ответ. Мне было бы интересно услышать, почему столько голосов за сообщение «это не работает»; это была проблема со старыми версиями Chrome? Может ли кто-нибудь, у кого это не сработало, предоставить дополнительную информацию?
Christian Rondeau
8
Сначала я был очень рад увидеть этот ответ, но могу подтвердить, что он не работает для меня (хотя я проверил выгрузку, как было предложено, перенаправление страницы все еще происходит, и у меня нет возможности установить точки останова в источниках страницы А). Может быть, это связано с тем, как перенаправляется первая страница? В моем случае страница A (страница, javascript которой я пытаюсь отладить) выполняет POST (через javascript) на странице B.
Эмиль Дж.
17
он работает нормально, проблема в том, что стек вызовов пуст, поэтому он не очень полезен, так как вы не сможете увидеть, что на самом деле вызвало перенаправление
Евгений Кузьменко
8
@EugeneKuzmenko серьезно, я не знаю, как это на самом деле кому-то помогает
Уилл П.
1
Это работает только в том случае, если у страницы есть обработчик выгрузки или перед выгрузкой, на котором отладчик может остановиться. Если такой обработчик не зарегистрирован, отладчик не сработает.
Rumpel 06
43

Сделайте следующее

  1. Открыть инструменты разработчика
  2. Перейти на вкладку " Источники"
  3. Ищите точки останова прослушивателя событий
  4. Разверните параметр загрузки
  5. Здесь проверьте вариант разгрузки

Точка останова при выгрузке Chrome

aWebDeveloper
источник
@TomBrito во время перерыва перед загрузкой (который мне пришлось использовать, чтобы уклониться от какой-то глупой платной подписки на газету), я могу проверять элементы. Разве вы не можете проверить при разгрузке? Я использую Chrome 71.0.3578.98.
linkD
12

У меня есть сторонняя библиотека JS, в которой было неправильное условие перезагрузки страницы. И из-за этого страница постоянно перезагружалась. Я пытался найти неправильный код.

Я попытался использовать метод «Точки останова прослушивателя событий», но, как сказано в комментарии, у вас нет трассировки стека в событиях выгрузки, поэтому это довольно бесполезно.

Решение , которое работает для меня: Я создал страницу с IFrame тег с атрибутом песочнице, например , <iframe sandbox="allow-same-origin allow-scripts allow-popups allow-forms"></iframe>и положить мой сайт в нем. Таким образом, внутри chrome будут возникать ошибки безопасности, и консоль покажет, где JS пытается получить доступ к объекту местоположения. Вы можете щелкнуть по нему и увидеть код. Лучше всего то, что в Chrome есть декомпрессор JS (кнопка {} в нижнем левом углу окна исходного кода), который умно, может отображать строку даже после красивой печати, так что вы можете увидеть ее даже в сжатом JS.

Дополнительная информация о свойстве песочницы: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/iframe#attr-sandbox

Адам Валлнер
источник
Это работает, только если код (в этом iframe) top.location = "..."не используетlocation = "..."
mems