我使用Sentry跟踪客户端错误。但是,我今天在Edge浏览器中加载了Web应用程序,但是却找不到空白页。 Edge提出了TextEncoder is not defined
错误,因为我捆绑包中的一个库引用了它不支持的TextEncoder
。 Sentry未报告该错误,因为该错误在初始化Sentry之前发生。
我使用vue-cli创建一个Vue项目,并在主文件顶部附近初始化了Sentry:
import { init } from '@sentry/browser';
import { environment } from '@/constants';
import { Vue as VueIntegration } from '@sentry/integrations';
export default function(Vue) {
const debug = environment !== 'production';
init({
dsn: 'redacted',
environment,
debug,
integrations: [new VueIntegration({ Vue, logErrors: debug })],
});
}
我一直在考虑使用<body>
标签开头附近的脚本标签手动初始化Sentry。但是,我使用VueIntegration
插件的事实使事情变得复杂。初始化Sentry两次是否安全?一次在主捆绑包加载之前,一次像在上面的示例中一样?
[我注意到文档中有关于managing multiple Sentry clients的内容,但是我不确定这是否与我的具体情况有关。
[我的一个想法只是在加载其他任何东西之前只是一个准系统window.onerror
钩子,但是我不确定在不拉入@sentry/browser
程序包的情况下如何与Sentry进行交互。理想情况下,我只使用一个简单的XHR请求和我的DSN与他们的服务进行通信。
我的问题是推荐哪种方法来跟踪在主要JS软件包中初始化Sentry之前发生的错误?] >>>
我使用Sentry跟踪客户端错误。但是,我今天在Edge浏览器中加载了Web应用程序,但是却找不到空白页。 Edge引发了TextEncoder未定义错误,因为其中一个库...
我最终通过添加准系统window.onerror
挂钩解决了这个问题,该挂钩在主捆绑包到达之前内联加载。该错误会立即发送到我们的API,然后发送到我们的Slack #alerts渠道。我添加了速率限制,因此人们不会滥用它(太多)。
index.html(由vue-cli生成,但新脚本标记除外):