我已经迁移到Odoo16。 使用Firefox、Chrome等浏览器,所有网站页面都可以。
但是使用 Safari,当我进入这个特定页面 https://www.samadeva.com/event 时,我收到此错误:
当我打开私有窗口或空缓存时,我成功渲染了页面。 到目前为止,我以为我已经解决了问题...
但过了一段时间,该网站的一些访问者报告说同样的问题再次出现......
我可以使用旧版本的 Safari (15.6) 来调查此问题:
似乎这个与 Safari WebKitServiceWorker 相关的问题也曾在 Angular 中发生过:https://github.com/angular/angular/issues/50378
...这个问题在 Safari 中众所周知:https://developer.apple.com/documentation/safari-release-notes/safari-17_2-release-notes#Service-Workers ...
但到目前为止,每个人都需要为使用 16.3
知道如何在我的odoo16页面的serviceWorker中实现这种类型的解决方法(由@gudvincent for Angular找到):https://www.samadeva.com/event/service-worker.js?
if (navigator.userAgent.includes("Version/17.0") || navigator.userAgent.includes("Version/17.1")) {
navigator.serviceWorker.getRegistrations().then(function (registrations) {
for (let registration of registrations) {
registration.unregister();
}
});
}
ServiceWorkerModule.register('ngsw-worker.js', {
enabled:
!navigator.userAgent.toUpperCase().includes("LIKE MAC")
? true
: ((navigator.userAgent.includes("Version/17.0") || navigator.userAgent.includes("Version/17.1")) ?
false : true)
})
我尝试在 odoo16 中使用我的网站的 head 标签注入这个 js 解决方法:编辑器 > 修改 > 主题 > head ...:
if (navigator.userAgent.includes("Version/17.0") || navigator.userAgent.includes("Version/17.1")) {
navigator.serviceWorker.getRegistrations().then(function (registrations) {
for (let registration of registrations) {
registration.unregister();
}
});
}
它在第一次调用时有效,但是当单击另一个页面时,错误再次附加。看来 serviceWorker 会自动重新注册。也许 eventListerner 在这里会很有用(即使注册成功并且已激活,服务工作者激活和推送事件也不会被触发)?
我发现的唯一解决方法是卸载模块 website_event_track,因为它包含文件 service-worker.js,这会在 16.3 中触发错误