2012-09-24 24 views
60

Bir uygulamadaki işlenmemiş javascript istisnasının tümünü bir uyarı kutusunda görüntülemenin bir yolunu bulmaya veya bulmaya çalışıyorum. Tüm sunucu tarafı kodunu kullanmadan, istemci tarafında yapılmasını istiyorum. MVC3'ü bir ortam olarak kullanıyorum.Tüm javascript işlenmemiş özel durumları yakalamak

Son birkaç gündür araştırıyorum ve tam olarak aradığım şeyi bulamadım.

Neredeyse aradığım şey gibi görünen 2 yol buldum, bu yollar dışında bir işlevin adını işlenmemiş tüm işlerin yığın izini yazdırmak için özel bir yönteme iletmeniz gerekiyor. Bu belirli bir işlev içindeki istisnalar. Bir işlev adını el ile işlenmeyen özel durumların yığın izlemesini yazdırmak için özel bir yönteme el ile geçirmek zorunda kalmamanın bir yolunu arıyorum. Bu özel yöntemin, tüm uygulamadaki tüm işlenmemiş istisnalar için "dinlemesini" isterdim. Önceki bağlantıya benzer

Ayrıca

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

şey:

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; 
} 
:

İşte

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

yukarıdaki 2 bağlantıdan temel kod belirli bir javascript fonksiyonu yığın izleme yazdırır

Yani, bunu özetlemek için, bir çeşit dinlemenin herhangi bir yolunu biliyor musunuz? Tüm javascript işlenmemiş istisnaları dinlemek ve daha sonra bir uyarı kutusunda ekrana yazdırmak için?

Teşekkürler! Jason

+0

Tek bir şey ... Bir uyarı kutusu kullanır mısınız? console.log'u (error_message) .... – Mathlight

+1

kullanabilirsiniz. _this question_ ** [Tüm JS hatalarını yakala] (http://stackoverflow.com/questions/5328154/catch-all-javascript-errors-and- send-onları sunucuya) ** muhtemelen bu soruya bir göz olmalıdır –

+0

size yardımcı olacaktır: http://stackoverflow.com/questions/205688/javascript-exception-handling daha – Mark

cevap

-1

Check out http://log4javascript.org Log4J tabanlı dayanmaktadır. Kodunuzun birçoğu istisnaları işlemek için try/catch ifadelerine sarılırsa, bu kitaplığı her zaman kullanılabilir bir "iletişim kutusu" ya da son kullanıcının görebileceği günlük penceresine göndermek için ortak bir arabirim olarak kullanabilirsiniz. İletişim kutusunun içeriğini yazıcıya veya PDF'ye yazdırmak için bir window.print() işlevi gören bir düğmeniz bile olabilir. İyi şanslar.

86

Bunu window.onerror yöntemini kullanarak yapabilirsiniz.

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

çok daha iyi Tüm uygulamamı bir try/catch bloğuna sarmaya çalışıyor. :) Teşekkürler! – Anthony

+10

Sadece bir kafa yukarıya: "Bazı/birçok hata olaylarının window.onerror'u tetiklemediğini unutmayın, özellikle onları dinlemek zorundasınız." -https: //developer.mozilla.org/en-US/docs/Web/API/GlobalEventHandlers.onerror – shusson

+5

Bu kodda işlev adını (myErrorHandler) eklemenize gerek yoktur ...sadece işlev olabilir (errorMsg, url, lineNumber) – JoelFan

22

düzgün 'hatası' olayına window.onerror, ya da (! Inanılmaz) bağlama kullanabilirsiniz ya: Eğer JavaScript hatalarını izlemek istiyorsanız, Atatus deneyebilirsiniz

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; 
}) 

. Ben Atatürk’de çalışıyorum.

İlgili konular