2014-12-09 85 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);