捕获错误时JavaScript源映射是否有效?

Szi*_*rdD 7 javascript source-maps

我使用了实现客户端异常日志记录window.onerror,在那里我检索当前错误和堆栈跟踪并使用AJAX将其发送到服务器

    window.onerror = function(message, url, line) {

      var stackTrace = printStackTrace(); //get stack trace

      //send message, url, line and stackTrace to the server using an ajax call
    }
Run Code Online (Sandbox Code Playgroud)

printStackTrace这个库提供的功能在哪里:http://stacktracejs.com/

问题是在生产中所有JavaScript文件都缩小了,因此堆栈跟踪和行号并不真正有用,因为所有错误都在文件的第1行报告,这是正常的,因为缩小版本包含一行代码.例如:

Message: Object doesn't support property or method 'indexOf' 
URL: http://[server]/[site]/content/combined/combined.635EE367354E6DF721593CAC56FECF95.min.js
Line: 1
Run Code Online (Sandbox Code Playgroud)

这可以使用源映射进行改进,还是仅在Developer Tools处于活动状态时才有效?

我想要的是,当没有启用开发人员工具激活/源映射的用户发生错误时,使用源映射(或至少是实际行号)获取完整堆栈跟踪.这有可能吗?

chr*_*sst 4

您绝对可以获取源映射中包含的所有信息并自行设计堆栈跟踪,但据我所知,目前还没有一个优雅的解决方案。无论哪种方式,它都需要至少使用ajax下载地图文件,并且可能还需要原始源文件。而且您将遇到一些棘手的跨浏览器问题,因为并非所有浏览器都完全支持源映射。

看起来堆栈跟踪在他们的计划中有这个,但还没有任何人执行它: https: //github.com/eriwen/javascript-stacktrace/issues/44

Get Sentry 确实将其作为其 js 日志记录实用程序的一部分来执行此操作,但它包含在一个更具多功能性的工具中,我相信它目前仅支持 Chrome 中的完整堆栈跟踪日志记录:https: //github.com/getsentry/raven- js