Node.js workbox google analytics/服务人员离线分析:“;无法使用';在';操作员搜索';同步';未定义

Node.js workbox google analytics/服务人员离线分析:“;无法使用';在';操作员搜索';同步';未定义,node.js,google-analytics,service-worker,offline,workbox,Node.js,Google Analytics,Service Worker,Offline,Workbox,我看到有人问过其他类似的问题,错误是分析代码位于主js文件中,而不是service-worker.js文件中。在本例中,所有代码都在service-worker.js文件中 设置:节点16.0.0(也与节点15.x.x相同),以及使用eleventy构建的静态站点 对于google analytics,我使用analytics.js文件。基本上是这样的,还添加了一些其他选项: <!-- Google Analytics --> <script> window.ga=win

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

设置:节点16.0.0(也与节点15.x.x相同),以及使用eleventy构建的静态站点

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

<!-- 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 -->
一般来说,服务人员的工作非常好。它有各种各样的路由例程,precache等等,谷歌分析代码似乎做了它应该做的事情。脱机时,我可以看到项目缓存在IndexedDB中,然后在连接恢复时,队列将被清除。我还可以在我的google analytics页面上看到“离线”的点击,如上面代码中的参数覆盖所述

…所以一切看起来都很好,但在控制台中,我仍然可以看到以下内容:

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
我还没有通过terser运行service worker,因此任何想看一看的人都可以阅读它

(然后查看开发工具-->应用程序-->服务工作者.js)

我还应注意,如果我使用标准:

googleAnalytics.initialize();
它仍然做同样的事情

显然有点不对劲,但我不知道是什么。有什么建议吗

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

事实上,这就是这里发生的事情。的HTML包括


这意味着要在
ServiceWorkerGlobalScope
(其中)上下文中运行的代码改为在
窗口
全局范围中运行,其中
自注册
未定义的
。这就是导致
无法使用“in”运算符在未定义的
运行时错误中搜索“sync”的原因

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

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

事实上,这就是这里发生的事情。的HTML包括


这意味着要在
ServiceWorkerGlobalScope
(其中)上下文中运行的代码改为在
窗口
全局范围中运行,其中
自注册
未定义的
。这就是导致
无法使用“in”运算符在未定义的
运行时错误中搜索“sync”的原因


只需调整您的构建,以确保您不会以执行service worker代码作为主应用程序的一部分的
标记结束,您应该没事。

“在这种情况下,所有代码都在service-worker.js文件中。”“在这种情况下,所有代码都在service-worker.js文件中。”老实说,我很高兴事情这么简单。谢谢你的快速回复,杰夫。有时候,当你试图发现问题时,显而易见的事情并不那么明显!老实说,我很高兴事情这么简单。谢谢你的快速回复,杰夫。有时候,当你试图发现问题时,显而易见的事情并不那么明显!
googleAnalytics.initialize();
<script async="" defer="" src="/service-worker.js?hash=4afd6f55e2"></script>