2012-09-24 49 views
60

我試圖找到或找出一種方法來顯示警告框中的應用程序中的所有未處理的JavaScript異常。我希望所有這些都在客戶端完成,而不使用任何服務器端代碼。我使用MVC3作爲環境。捕獲所有的javascript未處理的異常

我一直在研究過去幾天,還沒有找到我正在尋找什麼。

我發現以下兩種方式看起來像他們幾乎是我在找什麼,除了這些方法設置,以便您必須傳遞一個函數名稱到一個自定義的方法來打印所有未處理的堆棧跟蹤該特定功能中的例外。我正在尋找一種方法,不必手動將函數名稱傳遞給打印所有未處理異常的堆棧跟蹤的自定義方法。我希望這些自定義方法只是「偵聽」整個應用程序中的所有未處理的異常。

http://eriwen.com/javascript/js-stack-trace/

也類似於以前的鏈接的東西:

https://github.com/eriwen/javascript-stacktrace

下面是從上面第二連桿的基本代碼打印指定的JavaScript函數的堆棧跟蹤:

instrumentFunction: function (context, functionName, callback) { 
    context = context || window; 
    var original = context[functionName]; 
    context[functionName] = function instrumented() { 
     callback.call(this, printStackTrace().slice(4)); 
     return context[functionName]._instrumented.apply(this, arguments); 
    }; 
    context[functionName]._instrumented = original; 
} 

function printStackTrace(options) { 
    options = options || { 
     guess: true 
    }; 
    var ex = options.e || null, 
     guess = !! options.guess; 
    var p = new printStackTrace.implementation(), 
     result = p.run(ex); 
    return (guess) ? p.guessAnonymousFunctions(result) : result; 
} 

所以,總結一下,你們都知道有什麼方法可以有一些'傾聽呃'聽所有的JavaScript未處理的異常,然後打印到一個警告框中的屏幕?

謝謝! Jason

+0

有一點......你會使用一個警告框嗎?!?你可以使用console.log(error_message).... – Mathlight

+1

我認爲_這是question_ ** [捕捉所有JS錯誤](http://stackoverflow.com/questions/5328154/catch-all-javascript-errors-and-發送-他們到服務器)**會幫助你 –

+0

你或許應該看看這個問題: http://stackoverflow.com/questions/205688/javascript-exception-handling – Mark

回答

-1

結賬http://log4javascript.org它基於Log4J。如果大部分代碼都包含在try/catch語句中以處理異常,則可以使用此庫作爲將輸出發送到始終可用的「對話框」或最終用戶可以看到的日誌記錄窗口的通用接口。您甚至可以使用執行window.print()的按鈕將對話框的內容打印到打印機或PDF中。祝你好運。

86

你可以通過使用window.onerror方法來做到這一點。

window.onerror = function myErrorHandler(errorMsg, url, lineNumber) { 
    alert("Error occured: " + errorMsg);//or any message 
    return false; 
} 
+7

不過如此試圖將我的整個應用程序封裝在try/catch塊中。 :) 謝謝! – Anthony

+10

只是個頭: 「請注意,有些/許多錯誤事件不會觸發window.onerror,您必須專門聽取它們。」 -https://developer.mozilla.org/en-US/docs/Web/API/GlobalEventHandlers.onerror – shusson

+5

沒有必要在該代碼中包含函數名稱(myErrorHandler)...可以只是函數(errorMsg,url,lineNumber) – JoelFan

22

您可以使用window.onerror,或(令人驚訝!)結合 '錯誤' 事件正確:

window.onerror = function (message, file, line, col, error) { 
    alert("Error occured: " + error.message); 
    return false; 
}; 
window.addEventListener("error", function (e) { 
    alert("Error occured: " + e.error.message); 
    return false; 
}) 

如果你想跟蹤JavaScript錯誤,你可以嘗試Atatus。我在阿塔圖斯工作。