Как проследить события JavaScript (Отслеживание стека)?

На любом языке программирования я могу проследить любую функцию и знать, какая функция вызвана другим. Но в JavaScript, я не знаю, как, так как код не написан мной, и Firebug не дает эту функцию - насколько я знаю.

Пример:

Я хочу отобразить имена функций каждой функции, которая вызвана при нажатии на XYZ Element, и отобразите их в порядке.

Спасибо.

9
задан Filipp W. 24 November 2017 в 10:32
поделиться

4 ответа

Нашел это: Javascript stacktrace в любом браузере , Джеймс говорит, что у них есть аккаунт на github

function printStackTrace() {
  var callstack = [];
  var isCallstackPopulated = false;
  try {
    i.dont.exist+=0; //doesn't exist- that's the point
  } catch(e) {
    if (e.stack) { //Firefox
      var lines = e.stack.split('\n');
      for (var i=0, len=lines.length; i<len; i++) {
        if (lines[i].match(/^\s*[A-Za-z0-9\-_\$]+\(/)) {
          callstack.push(lines[i]);
        }
      }
      //Remove call to printStackTrace()
      callstack.shift();
      isCallstackPopulated = true;
    }
    else if (window.opera && e.message) { //Opera
      var lines = e.message.split('\n');
      for (var i=0, len=lines.length; i<len; i++) {
        if (lines[i].match(/^\s*[A-Za-z0-9\-_\$]+\(/)) {
          var entry = lines[i];
          //Append next line also since it has the file info
          if (lines[i+1]) {
            entry += " at " + lines[i+1];
            i++;
          }
          callstack.push(entry);
        }
      }
      //Remove call to printStackTrace()
      callstack.shift();
      isCallstackPopulated = true;
    }
  }
  if (!isCallstackPopulated) { //IE and Safari
    var currentFunction = arguments.callee.caller;
    while (currentFunction) {
      var fn = currentFunction.toString();
      var fname = fn.substring(fn.indexOf("function") + 8, fn.indexOf('')) || 'anonymous';
      callstack.push(fname);
      currentFunction = currentFunction.caller;
    }
  }
  output(callstack);
}

function output(arr) {
  // Output however you want
  alert(arr.join('\n\n'));
}
10
ответ дан 4 December 2019 в 15:11
поделиться

DynaTrace AJAX имеет некоторые из таких функций. Не совсем то, что вы ищете, но дает вам события и функции, связанные с элементом, и помогает устранять неполадки. Была бесплатная загрузка, проверьте.

0
ответ дан 4 December 2019 в 15:11
поделиться

Если вы просто хотите отладить свой код, лучший вариант - получить подключаемый модуль отладчика для вашего браузера. Плагин Firebug действительно предоставляет трассировку стека. ( см. Здесь )

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

0
ответ дан 4 December 2019 в 15:11
поделиться

Вы можете увидеть трассировку стека любой ошибки с помощью вызова функции stack () (в Firefox). Создание простой функции для печати трассировки стека может выглядеть следующим образом:

function getStackTrace() {
  try {
    unusedVariable++; // This creates an error we can trace
  }
  catch (e) {
    return e.stack;
  }
}

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

Надеюсь, это поможет.

3
ответ дан 4 December 2019 в 15:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: