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