如何解决我可以从 Service Worker 注册中得到实际错误吗?
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
}
// ...
serviceWorker.js
:
// ...
ddd; // the line with an error
// ...
我能否在 Uncaught ReferenceError: ddd is not defined
而不是 script.js
中获得实际错误 (TypeError: Failed to update a ServiceWorker for scope (...) ServiceWorker script evaluation Failed
)?我的代码比较复杂,我在我的 Sentry 项目中看到有些浏览器无法解析 Service Worker 脚本,但我想了解这种情况的原因。另外,我将 Sentry 客户端添加到了我的 Service Worker,但无论如何,在注册之前可能会抛出错误。
解决方法
如果有些浏览器无法解析您的代码,那么它实际上只是将您的代码转换为以前版本的 javascript。但是,如果这些是您正在运行的测试,那么您就有了将代码封装在 eval
中的开发版本。
简单说一下:
Uncaught ReferenceError: ddd is not defined
是运行时错误。当引擎解析你的脚本时,它不应该被抛出。但是,如果您有以下情况:
let [test] = [ddd]
如果您的引擎不理解 ES6 解构(即使 ddd
不存在),您很可能会收到语法错误。
这个:
ddd
可以像这样在 service worker 脚本中捕获
self.onerror = e => console.error(e);
ddd;
但是如果它像这样解析失败......那么它就行不通了:
self.onerror = e => console.error(e);
if(
但是,如果您将其包装在 eval
中:
self.onerror = e => console.error(e);
eval('if(');
然后这项工作(因为 eval
解析发生在运行时)。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。