0

有沒有人有任何想法如何對懶加載的JavaScript錯誤處理?我使用的方法是調用ajax請求,並在全局範圍內評估代碼。當運行時錯誤被觸發時,它會將文件名作爲我的延遲加載腳本進行處理,並且行號是錯誤行加上我的加載腳本中的eval的行號。除了所有的javascript文件被合併到網站的各個模塊之外,這不會那麼糟糕。嘗試抓住JavaScript文件本身不會捕獲函數的運行時錯誤。有任何想法嗎? Window.onerror不提供正確的文件名,所以它是不可能的。我需要在它被擊中之前抓住它。延遲加載的JavaScript運行時錯誤處理?

我在想也許我可以通過編程的方式在eval'd代碼中包含所有函數的嘗試捕獲(這很醜陋),但是由於它是在窗口級別完成的,我不確定如何訪問eval'd代碼具體和動態。當然,如果javascript是一個名爲「Bob」的對象,我可以訪問window.Bob,但我需要動態地執行它。

+0

也許我錯過了一些東西,但爲什麼你的JavaScript會拋出運行時錯誤?即使是這樣,在調用函數之前,您不能驗證函數參數嗎?看起來好像處理運行時錯誤的最佳方法是不允許它們發生。 – Sparafusile 2010-09-08 18:34:34

+0

這並不是說有運行時錯誤,而是在出現一個錯誤時,我想指定出於調試目的而拋出的內容。錯誤錯誤地表明加載腳本是問題。我正在計算正確的文件名/行號。 – g3k0 2010-09-08 19:20:27

回答

1

我解決了這個問題,但它不是最優雅的解決方案。基本上我所做的是:
1.站點加載後,我查看窗口中的所有對象並將它們推入數組中。這基本上對我的代碼說,忽略這些對象。

  1. 當我模塊化我的代碼時,我會跟蹤正在放入模塊中的文件和fileNames的長度。

  2. modulizer的最後一行使用fileLength數組和lineLengths並在我的錯誤處理對象中調用一個函數;

  3. 錯誤處理代碼在窗口中查找新對象。如果它們存在,請設置屬性以匹配fileLengths和fileNames;

  4. 通過新對象遞歸併添加裝飾函數以嘗試捕捉它們。

  5. 當其中一個捕獲物被擊中時,向上遍歷並找到屬性。

  6. 根據屬性計算文件和行號。

  7. 根據正確的文件和行號輸出新的錯誤;

是的醜陋......但它的工作原理。