Перехват функций/методов
Всем доброго времени суток, мне очень потребовался плагин-сканер для фаерфокса, который к примеру, после нажатия кнопки старт, выводит последовательный список вызовов всех функций/методов в рантайме.
Если такой штуки в природе не существует, может можно как-то самому написать скрипт, формирующий список вызовов, а потом вклеивать его плагином, в страницу, где требуется перехват? |
Народ, ответьте, перехват вызовов можно сделать как-либо?)
|
Вам нужно посмотреть call-стек? Можно отладчиком (Firebug, Venkman).
|
Dmitry A. Soshnikov, спасибо, а подскажите как на фаербаге смотреть стек, там есть кнопка Stack во вкладке Script, но там ничего не отображается..
|
В Firefox'е можно сделать
alert(new Error().stack); |
Kolyaj, он выдаёт какую-то непонятную строчку - но это точно не список выполненных функций..
|
(function test1() { (function test2() { (function test3() { alert(new Error().stack); })(); })(); })(); Цитата:
|
...
|
Kolyaj, понял, но мне нужно немножко не это. Мне нужен сканер выолненных функций - к примеру я нажал кнопку "start", и все функции/методы, которые выполнятся в скрипте до нажатия кнопки "stop" добавились в какой либо список, где всего лишь есть названия функций, и параметры.. Больше мне не надо.
|
Такая ситуация, что я пишу плагин для рессурса с очень крупными скриптами - онлайн игра. Разбираться в них и долго и ненужно. При симуляции события я обычно просто брал элемент, который его пускает, и брал событие из параметров типа OnClick="..", итп. тут я столкнулся с той проблеммой, что элемент вроде бы и реагирует на щелчок к примеру, но внутри него не прописаны никакие события. Вот мне и надо узнать, какая функция выполняется по щелчку на объект - element.click undefined, поэтому только так..
|
Объект event создаётся при срабатывании обработчика, поэтому невозможно прослушивать window, ожидая вызова обработчика и тем более получить тело ф-ции (если обработчик добавлен через методы DOM).
|
Разве что все выполняемые ф-ции будут сами себя регистрировать и добавлять в с писок.
|
Понятно.. Тоесть нельзя? Значит будем тыкать пальцем в небо)
|
Вся проблемма в принципе в том что у меня не получается ссимулировать событие - тоесть к примеру по щелчку левой кнопки мышки что либо происходит. Пытаюсь вызвать это событие:
так doc.getElementById('element').click(); и так (там используется jQuery) $('#element').click(); действие не выполняется Может быть вы подскажете, в чём может быть проблемма? |
Цитата:
Для Gecko var evt = new Event; evt.initEvent('click', true, true); document.body.dispatchEvent(evt); Для ИЕ: var evt = document.createEventObject(); document.body.fireEvent('onclick', evt); Про jQuery ничего сказать не могу. |
B~Vladi,
спасибо большое! у меня все работает, сделал так - var evObj = doc.createEvent('MouseEvents'); evObj.initEvent('click', true, true); ellinat.dispatchEvent(evObj); Последнее, не подскажите как сделать так чтобы кликало правой кнопкой мышки, а не левой? |
Цитата:
function xInitEvt(e,type){ if(e.initEvent&&e.dispatchEvent){ var evt = e.createEvent('MouseEvents'); evt.initEvent(type, true, true); e.dispatchEvent(evt); }else{ var evt = document.createEventObject(); document.body.fireEvent(type, evt); } } И ею пользоваца... Про левую кнопку пока не знаю... нада смотреть... Но в любом случае это не кроссбраузерный вариант + это, например, в Опере, можно отключать. |
Понятно, спасибо.
Насчёт кнопки - попробовал заменить метод evObj.initEvent('click', true, true); на частный метод evObj.initMouseEvent('click', true, true, doc.defaultView, 1, 1, 1, 1, 1, false, false, false, false, 2, null); где предпоследний параметр - номер кнопки мышки, всёравно кликает левой. Ладно, дальше уже попробую сам заставить кликать правой |
Цитата:
|
SunnyDay,
http://testcase.rubyforge.org/ru/docs/events здесь покопайтесь. А может даже и раскапывать не придется, самой библиотекой можно воспользоваться. |
Цитата:
по поводу списка функций, можно еще профайлер запустить по поводу эмуляции событий: а зачем? |
Часовой пояс GMT +3, время: 08:46. |