отладка в анонимную функцию JavaScript - PullRequest
4 голосов
/ 20 сентября 2011

Я пытаюсь реконструировать веб-страницу Microsoft CRM 2011. На странице загружается огромное количество скриптов и HTML. В настоящее время я уделяю особое внимание событию click элемента checkbox на странице. Нажатие на элемент вызывает изменение поведения на странице, и я хочу пройтись по коду, который обрабатывает это.

Проблема в том, что обработчик щелчков флажка прикреплен во время загрузки страницы анонимным методом. Таким образом, код есть, но попытка его найти требует найти иголку в стоге сена.

Существует ли метод, использующий средства отладки Internet Explorer, чтобы каким-либо образом останавливать отладчик при нажатии флажка? Может и не быть, но я думал, что спросить.

Ответы [ 3 ]

3 голосов
/ 21 сентября 2011

Лучше всего запустить в консоли:

document.getElementById('theCheckBoxId').onclick

Если в консоли появляется null, вы можете продолжить чтение.В противном случае обработчик onclick и его код должны появиться прямо в консоли.



Используйте инструменты разработчика Chrome : щелкните правой кнопкой мыши что-нибудь на странице -> осмотреть элемент.Вы увидите это: A screenshot of chrome dev tools

Перейдите к «ИСТОЧНИКАМ» (больше не называемым «Сценариями»), и появится «||»Кнопка паузы, как вы видите на скриншоте.Если страница не дает сбоя, вы можете установить флажок и, поскольку сценарии приостановлены, вы увидите, что код для анонимной функции будет выделен, и страница будет заморожена.Затем вы можете использовать инструменты для пошагового выполнения кода.

Тем не менее, мы, безусловно, можем лучше помочь вам с тем, что вы на самом деле хотите со страницы ...

Вы также можете использовать команду присоединить onbeforescriptexecute с консоли: https://developer.mozilla.org/en/DOM/element.onbeforescriptexecute В консоли вы могли бы выглядеть примерно так:

document.getElementById('theCheckBoxId').onbeforescriptexecute = function (e) {
  alert('hey same thing as pausing the script!');
  console.error('script with this id about to run: ' + e.target.id);
  //Could also try .src .innerText etc. 
  //Reference this: https://developer.mozilla.org/en/DOM/element.onbeforescriptexecute

  //the full argument to checkout in the console:
  console.error(e);
};

Вы также можете поиграться с методом currentScript: https://developer.mozilla.org/en/DOM/document.currentScript

Вы также можете щелкнуть правой кнопкой мыши и просмотретьустановите флажок, а затем на правой панели инструментов dev посмотрите код прослушивателя событий «Click», но часто он искажен и с ним трудно работать.

3 голосов
/ 21 сентября 2011

Похоже, у вас нет возможности изменить анонимную функцию, которая связана с событием щелчка флажка.Если нет, возможно, вы можете создать второй обработчик событий, но определите его до определения существующего обработчика событий.

Обработчики событий в браузере обычно запускаются в том порядке, в котором они были определены.См. http://jsfiddle.net/aroder/kkYfX/2/. Если вы определили свой собственный обработчик событий, он даст вам место для присоединения отладчика, по крайней мере, где-то рядом с анонимной функцией, которую вы пытаетесь выполнить.

Также используйтеоператор отладчика, чтобы автоматически сломать ваш код.Если вы используете IE, убедитесь, что в разделе «Инструменты»> «Параметры»> «Дополнительно»> «Отключить отладку сценариев» (Internet Explorer) не установлено.

<script>
  // the debugger statement will automatically break in IE dev tools, Firebug, and Chrome dev tools
  debugger;
</script>
1 голос
/ 21 сентября 2011

Старая версия IE довольно слаба, особенно когда дело доходит до отладки AJAX-приложений.Firebug - лучшее, что я видел.Это позволяет вам заменить существующую функцию javascript своей собственной.Это то, что я предлагаю.

  1. Откройте веб-приложение в Firefox
  2. Скопируйте исходный код существующей функции
  3. Отформатируйте его и добавьте следующий оператор в функцию наместо, где вы хотите, чтобы он остановился и осмотр переменных.
  4. debugger;
  5. Вставьте новый код в окно консоли Firebug и нажмите Run .. вот и все!
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...