首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >workbox-google分析/服务工作者离线分析:“无法使用' in‘运算符搜索未定义的”同步“。

workbox-google分析/服务工作者离线分析:“无法使用' in‘运算符搜索未定义的”同步“。
EN

Stack Overflow用户
提问于 2021-04-22 13:36:56
回答 1查看 459关注 0票数 1

我看到还有其他类似的问题被问到了,错误是在主js文件中有分析代码,而不是service-worker.js文件。在本例中,所有代码都在service-worker.js文件中。

安装程序:节点16.0.0 (对节点15.x.x也这样做),以及使用eleventy构建的静态站点

对于google,我使用analytics.js文件。基本上,这还添加了一些其他选项:

代码语言:javascript
复制
<!-- Google Analytics -->
<script>
window.ga=window.ga||function(){(ga.q=ga.q||[]).push(arguments)};ga.l=+new Date;
ga('create', 'UA-XXXXX-Y', 'auto');
ga('send', 'pageview');
</script>
<script async src='https://www.google-analytics.com/analytics.js'></script>
<!-- End Google Analytics -->

有关的service-worker.js代码:

代码语言:javascript
复制
import * as googleAnalytics from 'workbox-google-analytics';
googleAnalytics.initialize({
  parameterOverrides: {
    cd1: 'offline',
  },
});

一般的服务人员工作都很好。它有各种各样的路由例程、precache等,google分析代码似乎可以做它应该做的事情。脱机时,我可以看到IndexedDB中的项缓存,然后当连接恢复时队列清除。我还可以在我的google分析页面上看到“离线”的点击,如上面代码中的parameterOverrides所详细介绍的。

...so看起来都不错,但在控制台中,我仍然可以得到以下信息:

代码语言:javascript
复制
service-worker.js?hash=4f292a2050:4259 Uncaught (in promise) TypeError: Cannot use 'in' operator to search for 'sync' in undefined
at Queue._addSyncListener (service-worker.js?hash=4f292a2050:4259)
at new Queue (service-worker.js?hash=4f292a2050:4077)
at new BackgroundSyncPlugin (service-worker.js?hash=4f292a2050:4341)
at initialize (service-worker.js?hash=4f292a2050:4515)
at service-worker.js?hash=4f292a2050:4647
at service-worker.js?hash=4f292a2050:65

我还没有运行服务工作人员通过简洁,所以它是可读的任何人谁想看看。

https://www.thetestspecimen.com/ (然后查看dev tools->application->service-worker.js)

我还应该指出,如果我使用该标准:

代码语言:javascript
复制
googleAnalytics.initialize();

它还是会做同样的事。

很明显有什么不对劲,但我想不出是什么。如有任何建议请见谅

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-04-22 15:28:13

我已经看到其他类似的问题被问到了,错误是在主js文件中有分析代码,而不是service-worker.js文件。在本例中,所有代码都在service-worker.js文件中。

这就是,事实上,这里发生了什么。https://www.thetestspecimen.com/的HTML包括

代码语言:javascript
复制
<script async="" defer="" src="/service-worker.js?hash=4afd6f55e2"></script>

这意味着要在ServiceWorkerGlobalScope上下文中运行的代码(在其中运行self.registration is defined),而是在window全局作用域中运行,其中self.registrationundefined。这就是导致Cannot use 'in' operator to search for 'sync' in undefined运行时错误的原因。

只需调整您的构建,以确保您不会以<script>标记作为主应用程序的一部分执行您的服务工作人员代码,您应该会没事的。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67214380

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档