2012-01-19 40 views
8

所以现在我们有一些通用的代码来报告我们的代码或第三方代码的错误。我们的项目是针对iOS的JQM/Phonegap项目。发生了什么是我们几乎总是得到相同的无用错误... TypeError:'undefined'不是一个函数...没有行号或其他有用的信息。有没有办法我可以改变代码,可能会得到什么是未定义或在哪里?改善我们的javascript错误报告

window.onerror = function myErrorHandler(errorMsg, url, lineNumber) { 
    //Handle errors not in a jquery event handler 
    //DebugMessage(errorMSg + " "+ url + " " + lineNumber); 
    var ex = new Error(errorMsg, url, lineNumber); 
    HandleError(ex, "window.onerror"); 
     //HandleError sends the error object to 
     //a webservice to log the error. 
    return true; 
}; 

有关调试javascript错误的任何提示也会有所帮助。

+1

我有同样的问题。它看起来像一个UIWebView的bug,因为当我在safari/chrome上运行相同的代码时,lineNumber被定义。我们应该向Apple报告这个错误:https://bugreport.apple.com - 我们填写关于这个错误的报告越多,它就会变得越重要(不可能为bug投票,所以Apple团队优先处理错误报告计数重复的数量)。 – Samuel

+0

不知道这是否适用于手机,但我过去曾使用过这个:https://github.com/posabsolute/jQuery-Error-Handler-Plugin也打开Mobile Safari中的调试模式并使用console.log('error信息');也可以工作 –

+0

查看插件的代码,它与上面的代码执行相同的操作(用代码替换错误的电子邮件/记录错误)。所以我仍然会得到TypeError:'undefined'不是一个函数,line:undefined。我会填写错误报告,同时继续寻找解决问题的方法。 – Twomz

回答

0

您是否听说过Ripple?它是专为测试PhoneGap应用程序而设计的Chrome的移动模拟器。

这可能会帮助您在调试设备之前找到错误。

1

最近几个月,浏览器扩展了window.onerror的签名以提供更多信息。

window.onerror = function(msg, file, line, col, error) { 

    // backwards compat 
    if (!error) { 
    error = new Error(msg); 
    } 

    // send error to your logger 

} 

这应该会给你更多的信息。但仍然有些事情需要更好的背景。您应该查看一些第三方工具,例如TrackJS,它会自动为您提供此信息,以及有关错误发生情况的额外信息。

声明:我是TrackJS的原始作者之一,所以我知道一堆关于JavaScript错误:)