Javascript 我可以从服务人员注册中获得实际错误吗?
例如,如果我有这样的代码:Javascript 我可以从服务人员注册中获得实际错误吗?,javascript,progressive-web-apps,service-worker,sentry,Javascript,Progressive Web Apps,Service Worker,Sentry,例如,如果我有这样的代码: script.js: // ... try { const serviceWorkerRegistration = await navigator.serviceWorker.register('/serviceWorker.js'); await serviceWorkerRegistration.update(); // ... } catch (e) { console.error(e); // here I want to get an act
script.js
:
// ...
try {
const serviceWorkerRegistration = await navigator.serviceWorker.register('/serviceWorker.js');
await serviceWorkerRegistration.update();
// ...
} catch (e) {
console.error(e); // here I want to get an actual error
}
// ...
// ...
ddd; // the line with an error
// ...
serviceWorker.js
:
// ...
try {
const serviceWorkerRegistration = await navigator.serviceWorker.register('/serviceWorker.js');
await serviceWorkerRegistration.update();
// ...
} catch (e) {
console.error(e); // here I want to get an actual error
}
// ...
// ...
ddd; // the line with an error
// ...
我是否可以在我的
script.js
中获取实际错误(Uncaught ReferenceError:ddd未定义),而不是TypeError:Failed to update a serviceforner for scope(…)serviceforner script evaluation Failed
?我的代码更复杂,我在Sentry项目中看到一些浏览器无法解析service worker脚本,但我想了解这种情况的原因。此外,我还向我的服务人员添加了Sentry客户端,但无论如何,在注册之前可能会抛出一个错误。如果有一些浏览器无法解析您的代码,那么它实际上只是将您的代码转换为以前的javascript版本。但是,如果这些是您正在运行的测试,那么您有一个开发版本,可以将代码封装在eval
中
我想说清楚:
Uncaught ReferenceError: ddd is not defined
是一个运行时错误。引擎在分析脚本时不应抛出它。但是,如果您有以下情况:
let [test] = [ddd]
如果引擎不理解ES6的解构(即使ddd
不存在),则很可能会出现语法错误
这:
可以在服务工作者脚本中捕获,如下所示
self.onerror = e => console.error(e);
ddd;
但是如果它在这样的解析中失败了。。。那就不行了:
self.onerror = e => console.error(e);
if(
但是,如果将其包装在评估中
:
self.onerror = e => console.error(e);
eval('if(');
然后这项工作(因为eval
解析在运行时进行)。不,问题似乎不在于ES6语法,而在于通过importScripts()
下载脚本。因为这个错误出现在基于Chromium的浏览器的最新版本中,所以我自己在相同的版本中进行了测试,结果还可以。我已经在try
/catch
中包装了我的代码,我认为它与self.onerror()
回调相同。但是我需要的不是服务人员中的错误,而是我的script.js
中的错误,因为我想将其发送给Sentry。服务人员中不可能使用Sentry吗?可能,我使用,但在我的例子中,在Sentry客户端初始化之前似乎有一个错误。如果Sentry不能从服务工作者脚本工作,那么它可能是不可能的。我不知道Sentry,但它显然是通过RESTAPI使用的服务。我不确定fetch
或XMLHTTPRequest
是否可以通过服务人员执行跨源请求。您问题中的错误似乎是解析错误,因此不太可能是importScripts
。