Я нашел какой-то способ, который может быть полезным.Он использует идею обратных вызовов.
Определить следующую простую функцию в каждом кадре:
function getCaller() { return arguments.callee.caller; }
и следующие функции только для верхнего кадра:
function populateStack(fn) {
var perFrames = [];
for (var i = 0; i < windows.length; i++) {
var win = windows[i];
var func = (win == this) ? fn : win.getCaller();
var localStack = [];
while (func) {
localStack.push(getFuncName(func));
func = func.caller;
}
perFrames.push(getWinName(win) + ": " + localStack.join(", "));
}
alert(perFrames.join("\n"));
}
function getWinName(win) {
var m = win.location.toString().match(/^.*\/(.*)$/);
return m[1];
}
function getFuncName(func) {
var m = func.toString().match(/^function\s*(\w*)\(/);
return m[1] || "anonymous";
}
окна должны бытьмассив в верхнем фрейме, содержащий все объекты окна (т.е. фреймы).Использование:
window.top.populateStack.call(window, arguments.callee);
Я потратил пару часов, пытаясь восстановить точный порядок, в котором вызывались функции, но не нашел решения.В этом коде доступен только частичный порядок (функции правильно отсортированы внутри фреймов).
Если у вас есть несколько серверов с разными версиями кода, вы можете добавить код, который будет анализировать тела функций и таким образом получатьбольше информации о заказе звонка.
Надеюсь, это поможет: -)