Захват кода javascript, выполняемого onClick
Я работаю над сайтом с множеством устаревших javascript и jquery, и нет документации, чтобы показать, что происходит, когда.
У меня есть определенная проблема для исправления, и я не могу найти соответствующий код, который выполняется при нажатии кнопки. Чтобы спасти меня от траления (и смысла) сотен строк наследия script, есть ли функция, возможно, в Firebug, которая будет определять, что выполняется script, когда я нажимаю кнопку?
Спасибо за вашу помощь.
Ответы
Ответ 1
Я считаю, что в окне консоли Firebug есть функция Profile
. Нажмите профиль, нажмите кнопку, а затем нажмите профиль еще раз. Он должен дать вам то, что все функции были вызваны в это время. Будьте уверены, что если этот код включает jQuery, вы можете получить огромный длинный список функций, потому что jQuery использует тонны в своем коде. К сожалению, профилировщик также будет показывать анонимные функции, которые могут быть очень больны.
В противном случае выполните поиск в коде для класса или идентификатора кнопки и пройдите через них. Если у вас есть идентификатор fancy
, вы можете выполнить поиск #fancy
в своем коде и попытаться его найти. Это может привести вас в общем направлении, по крайней мере.
Ответ 2
Вы можете нажать кнопку Firebug "Break on next" (на вкладке Script, она выглядит как кнопка паузы), а затем нажмите кнопку, которую вы хотите отлаживать.
В следующий раз, когда выполняется какой-либо JavaScript-код, Firebug перейдет в отладчик и покажет вам эту строку кода.
Ответ 3
Кнопка break не работает для меня. Вместо этого я редактировал атрибут onclick с FireBug и добавлял его с помощью "отладчика";... тогда вы разломаетесь сразу после нажатия:)
Ответ 4
Ни один из вышеперечисленных ответов не работал у меня. Я пытаюсь использовать Firebug, чтобы выяснить, как функция на странице работает на сайте, на котором я не контролирую. Вот что сработало для меня.
Сначала, я получил идентификатор элемента, который я нажимаю, из источника страницы, а затем получить временную ссылку на него, создав часы (под вкладкой script):
tmp=document.getElementById("idOfElement")
Затем я назначил текущее значение onclick другой временной переменной.
oldfunc=tmp.onclick
Затем я определил новую функцию onclick. Первоначально я попытался поставить debugger;
в первую очередь в функции, но это не сработает! Поэтому вместо этого я создал предупреждение:
tmp.onclick = function() { alert("Ok"); oldfunc() }
Теперь, как только я нажимаю на кнопку, появляется предупреждение, после чего я нажимаю кнопку "Перерыв на следующей", как указано в другом ответе на этот вопрос. Затем я увольняю предупреждение и сразу же попадаю в отладчик в правильном месте.
В моем случае кнопка "Перерыв на следующей" не работала сама по себе, потому что есть много других событий, просто замалчивание страницы заставляло удалять точку останова, не позволяя мне когда-либо нажимать кнопку.
Ответ 5
В Firebug вы можете установить точку останова в некотором JS, а затем получить стек, который позволит вам узнать текущий стек вызовов функции. Поэтому, если вы установите точку останова в функции, используемой несколькими обработчиками, вы можете использовать это, чтобы точно определить, в каком обработчике вы находитесь.
Возможно, это не сработает, если вы имеете дело с обратными вызовами AJAX и т.п.