2014-12-09 40 views
0

我想检测来电者的功能和来自哪里。如何检测来电者的功能和来电的位置

例如:

假设我们在HTML内容上有以下内容:

<script src="/somefunc.js"></script> 

而且下面的函数位于somefunc.js

exampleFunction = function(){ 
    var f = document.getElementById("hello") 
} 

正如你看到exampleFunction被调用的getElementById()函数。为了检测这个调用,我用下面的代码覆盖了getElemenyById()。

document._oldGetElementById = document.getElementById; 
document.getElementById = function(elemIdOrName) { 
    var result = document._oldGetElementById(elemIdOrName); 
    if (! result) { 
     var elems = document.getElementsByName(elemIdOrName); 
     if (elems && elems.length > 0) { 
      result = elems[0]; 
     } 
    } 
    console.log("someone called me! Caller function = "+arguments.callee.caller); 
    return result; 
}; 

但我无法设法获取哪些函数调用者的信息,它是什么位置?我的意思是我想获得如下输出的信息。

Caller = exampleFunction 
Caller location = site.com/somefunc.js 

任何想法?

+0

exampleFunction = function(){ var f = document.getElementById(“hello”) }是匿名的。尝试添加函数名称来获取函数名称,如“exampleFunction = function exFunction(){ var f = document.getElementById(”hello“) }” – pmverma 2014-12-09 11:53:19

+0

pmverma - 这听起来像一个答案。对于OP - 你得到了什么输出?只是未定义的或别的什么? – 2014-12-09 11:55:52

+0

@DannyStaple我没有运行这个。但是,如果没有给出这个名字,你就不能得到实际的函数名称。如Mehmet Ince所做的那样。我错了吗? – pmverma 2014-12-09 11:58:58

回答

0

您可以在Chrome的调试器中查看调用堆栈。 只需将一个断点添加到您的覆盖函数并使其调用,然后您就可以跟踪调用者的js文件。 附加屏幕截图 http://i.stack.imgur.com/aAlKp.png 如果要在控制台上打印它,请编辑 尝试 console.log((new Error).stack);