我看到还有其他类似的问题被问到了,错误是在主js文件中有分析代码,而不是service-worker.js文件。在本例中,所有代码都在service-worker.js文件中。
安装程序:节点16.0.0 (对节点15.x.x也这样做),以及使用eleventy构建的静态站点
对于google,我使用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 -->有关的service-worker.js代码:
import * as googleAnalytics from 'workbox-google-analytics';
googleAnalytics.initialize({
parameterOverrides: {
cd1: 'offline',
},
});一般的服务人员工作都很好。它有各种各样的路由例程、precache等,google分析代码似乎可以做它应该做的事情。脱机时,我可以看到IndexedDB中的项缓存,然后当连接恢复时队列清除。我还可以在我的google分析页面上看到“离线”的点击,如上面代码中的parameterOverrides所详细介绍的。
...so看起来都不错,但在控制台中,我仍然可以得到以下信息:
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)
我还应该指出,如果我使用该标准:
googleAnalytics.initialize();它还是会做同样的事。
很明显有什么不对劲,但我想不出是什么。如有任何建议请见谅
发布于 2021-04-22 15:28:13
我已经看到其他类似的问题被问到了,错误是在主js文件中有分析代码,而不是service-worker.js文件。在本例中,所有代码都在service-worker.js文件中。
这就是,事实上,这里发生了什么。https://www.thetestspecimen.com/的HTML包括
<script async="" defer="" src="/service-worker.js?hash=4afd6f55e2"></script>这意味着要在ServiceWorkerGlobalScope上下文中运行的代码(在其中运行self.registration is defined),而是在window全局作用域中运行,其中self.registration是undefined。这就是导致Cannot use 'in' operator to search for 'sync' in undefined运行时错误的原因。
只需调整您的构建,以确保您不会以<script>标记作为主应用程序的一部分执行您的服务工作人员代码,您应该会没事的。
https://stackoverflow.com/questions/67214380
复制相似问题