2014-11-05 29 views
0

購物車頁面包含錯誤日誌:如何從瀏覽器修復javavascript誤差,提高錯誤記錄在瀏覽器中呈現

window.onerror = function (errorMsg, url, lineNumber, column, errorObj) { 
    $.post('/Home/Error', 
    { 
     "errorMsg": errorMsg, 
     "url": url, 
     "lineNumber": lineNumber, 
     "column": column, 
     "errorobj": JSON.stringify(errorObj) 
    }); 

其錯誤記錄到單MVC4應用服務器:

public ActionResult Error(string errorMsg, string url, 
     string lineNumber, string column, string errorobj) 
    { 
     Logifail.Write(
      string.Format(
      "Error {0}\n" + 
      "Url {1}\n" + 
      "Line {2}\n" + 
      "Column {3}\n" + 
      "Obj {4}\n", errorMsg, url, lineNumber, column, errorobj 
      ); 
     return new ContentResult(); 
    } 

服務器日誌包含大量消息

Error Object doesn't support this property or method 
Url http://example.com/Store/Details?product=H62810-00 
Line 132 
Column 
Obj 

第132行包含​​ 此行是方法,它在車更新價格:

var updatePage = function() { 
     var price = Number($('#Price').text().replace(',', '.').trim()), // line 132 
      quantity = Number($('#spinner').val().replace(',', '.')); 
     var total_eur = price * quantity; 
     $('span#total_eur').text(total_eur.toFixed(2)); 
    }; 

它看起來像什麼是錯的,有時在這條線。 如何解決這個錯誤?我嘗試了可能的用戶交互在這個頁面調用這個方法,但是錯誤不會發生。此錯誤僅在某些用戶中出現。

updatePage()可以更改,以避免錯誤發生? 如何在瀏覽器中記錄關於javascript錯誤的更多信息:javascript堆棧跟蹤,變量名稱以及來自瀏覽器的當前和其他數據,這些數據可以提供有關錯誤的更多信息? 列和errorobj總是空的。爲什麼這些不會傳遞給錯誤處理程序?

jquery,jquery-ui與一些插件使用。下列文件被加載到頁面中的精縮形式:

 "~/Scripts/jquery/jquery-1.8.3.js", 
     "~/Scripts/jquery-ui-1.9.2.custom.js", 
     "~/Scripts/menubar.js", 
     "~/Scripts/jBreadCrumb/js/jquery.jBreadCrumb.1.1.js", 
     "~/Scripts/Pikachoose/jquery.fancybox.js", 
     "~/Scripts/jquery.dotdotdot-1.5.6-packed.js", 
     "~/Scripts/responsiveslides.js", 
     "~/Scripts/jcarousel-0.2/lib/jquery.jcarousel.js", 

回答

0

.trim()在IE8不支持,所以這是很可能的理由越多,你只有少數用戶看到它。

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/Trim提出以下建議填充工具

if (!String.prototype.trim) { 
    (function(){ 
    // Make sure we trim BOM and NBSP 
    var rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g; 
    String.prototype.trim = function() { 
     return this.replace(rtrim, ""); 
    } 
    })(); 
} 

這裏是.trim()

Chrome | Firefox (Gecko) | Internet Explorer | Opera | Safari 
----------------------------------------------------------------- 
(Yes) | 3.5 (1.9.1)  |  9   | 10.5 | 5 
+0

謝謝您的支持選項。如何提高錯誤日誌記錄:日誌調用堆棧和JavaScript源代碼行發生異常? – Andrus 2014-11-08 21:19:20

+1

看着你無法從你的日誌中獲得更多的信息。 onerror沒有收到一個錯誤對象,因此你不能得到一個堆棧跟蹤,這裏是一個很好的文章討論選項http://blog.meldium.com/home/2013/9/30/so-youre-thinking -of-跟蹤您的JS-錯誤 – Quince 2014-11-10 09:18:27