Есть ли способ отлаживать или отслеживать каждое событие JavaScript в Internet Explorer 7?
У меня есть ошибка, которая предотвращает прокрутку после выделения текста, и я не знаю, какое событие или действие вызывает ошибку. Я действительно хочу видеть, какие события запускаются, например, при перемещении мыши.
Слишком много работы, чтобы перепрограммировать источник, и я как бы надеялся, что есть что-то вроде сниффера, который показывает мне все инициированные события.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Это базовый вариант, но вы можете вставлять предупреждения или звонки document.write, когда что-то запускаете.
Возможно, вы захотите попробовать Visual Studio 2008 и ее функцию для отладки кода JavaScript.
Если проблема не является специфической для Internet Explorer 7, но также возникает в Firefox, то другим хорошим способом отладки кода JavaScript является Firefox и надстройка Firebug, в которой есть отладчик JavaScript. Затем вы также можете поместить операторы console.info в код JavaScript, который затем вы можете увидеть вывод в Окно консоли в Firebug, вместо использования предупреждений, которые иногда портят цепочку событий.
Из того, что я читал, это проблема только для IE7, поэтому Firebug не используется ... Что прискорбно, потому что он пинает все остальное.
Я не уверен в точном коде (прошло некоторое время с тех пор, как я написал сложный код JavaScript), но вы можете перечислить все элементы управления в форме и прикрепить событие, которое выводит что-то, когда событие запускается.
Вы даже можете использовать анонимные функции, чтобы обернуть необходимую информацию для определения того, какое событие было инициировано.
Очевидный способ - настроить несколько предупреждений для различных событий, например:
element.onclick = function () { alert('Click event'); }В противном случае у вас есть менее навязчивый вариант размещения ваших предупреждений где-нибудь в домене.
Но серьезно подумайте об использовании библиотеки, такой как jQuery, для реализации вашей функциональности. Многие проблемы с кроссбраузерностью уже решены, и вам больше не нужно их решать. Я не совсем уверен в функциональности, которую вы пытаетесь достичь, но, скорее всего, есть много возможностей для прокрутки и выбора плагинов для jQuery, которые вы могли бы использовать.
Одна вещь, которую мне нравится делать, - это создавать функцию привязки в JavaScript (например, то, что вы можете найти в библиотеке Прототип) специально для событий, чтобы она передавала объект «событие» вместе с связанной функцией. Теперь, если бы вы сделали это, вы могли бы просто добавить вызов трассировки, который будет вызываться для каждого обработчика, который его использует. А затем удалите его, когда он не нужен. Одно место. Легко.
Однако, независимо от того, как вы вызываете оператор трассировки, вы все равно хотите его увидеть. Лучшая стратегия - иметь отдельную панель или окно для обработки вызовов трассировки. Набор инструментов Dojo имеет встроенную консоль, которая работает в Internet Explorer, и есть другие подобные вещи. Классический способ сделать это - создать новое окно и добавить к нему document.write.
У Мэтта Берсета есть то, что вы ищете в Отладка приложений ASP.NET AJAX с помощью элемента управления AjaxControlToolkit в консоли трассировки.
Он основан на регистраторе Yahoo Юй, YUI 2: Регистратор.
Borkdude сказал:
You might want to try Visual Studio 2008 and its feature to debug JavaScript code.
Я много раз занимался обработкой событий, и, на мой взгляд, хотя классические пошаговые отладчики полезны для отслеживания длинных прогонов кода, они не подходят для отслеживания событий. Представьте, что вы слушаете события перемещения мыши и взламываете другое приложение при каждом событии ... Так что в этом случае я настоятельно рекомендую вести журнал.
If the problem is not specific to Internet Explorer 7 but also occurs in Firefox, then another good way to debug JavaScript code is Firefox and the Firebug add-on which has a JavaScript debugger.
И еще есть Firebug Lite для Internet Explorer. У меня не было возможности им воспользоваться, но он есть. :-) Обратной стороной является то, что это не полноценный отладчик, но у него есть объект window.console, который вам нужен.
Прокрутите все элементы на странице, для которых определена функция onXYZ, а затем добавьте к ним трассировку:
var allElements = document.all; // Is this right? Anyway, you get the idea.
for (var i in allElements) {
if (typeof allElements[i].onblur == "function") {
var oldFunc = allElements[i].onblur;
allElements[i].onblur = function() {
alert("onblur called");
oldFunc();
};
}
}
+1 за показ кода. Интересный подход ... Вы также можете развернуть здесь alert (), чтобы показать имя тега элемента и его идентификатор. Было бы даже лучше использовать ведение журнала консоли вместо alert (), особенно если у вас много элементов с обработчиками.
@ [nickf] - Я почти уверен, что document.all - это специфическое расширение Internet Explorer.
Вам нужно прикрепить обработчик событий, нет возможности просто «наблюдать» за событиями. Такой фреймворк, как jQuery библиотеки Microsoft Ajax, легко предоставит вам методы для добавления обработчиков событий. jQuery хорош своей структурой селекторов.
Затем я использую Firebug (расширение Firefox) и устанавливаю точку останова. Я считаю, что Firebug намного проще установить и удалить, чем Visual Studio 2008.
«document.all - это расширение IE». ... хорошо, что этот вопрос касается отладки в IE, тогда
Я предлагаю использовать FireFox вместе с FireBug и использовать встроенные объекты Debug / Trace. Они очаровательны.
Прочитайте описание. Это проблема IE7.
согласен, но источник не мой и тбх немного ... неряшливо