Я хочу включить сервисного работника на моем веб-сайте на Angular, но он не регистрируется, если используется scrollmagic. Если я отключаю анимацию, управляемую ScrollMagic, она регистрируется очень хорошо.
Я импортировал GSAP, ScrollMagic в angular-cli.json:
"scripts": [
"../node_modules/gsap/src/uncompressed/TweenMax.js",
"../node_modules/scrollmagic/scrollmagic/uncompressed/ScrollMagic.js",
"../node_modules/scrollmagic/scrollmagic/uncompressed/plugins/animation.gsap.js"
]
и декларируя в каждом компоненте, я использую ScrollMagic:
declare let TimelineMax: any;
declare let ScrollMagic: any;
declare let TweenMax: any;
Я создаю контроллер следующим образом:
ngOnInit() {
this.animation();
}
animation() {
this.controller = new ScrollMagic.Controller({
globalSceneOptions: {
triggerHook: 'onLeave',
duration: 0
}
});
(...)
}
}
Таким образом, регистрируется сервисный работник, если я перехожу на страницу, на которой нет прокрутки, или я отключаю ее по нажатию кнопки:
(...)
this.controller.destroy();
(...)
В этом случае он загружает ПО, когда сайт открыт (без обновления).
Он не регистрирует SW, если я использую setTimeout или аналогичные решения для создания контроллера:
setTimeout(()=>{
this.controller = new ScrollMagic.Controller({
globalSceneOptions: {
triggerHook: 'onLeave',
duration: 0
}
});
}, 3000);
Edit:
Конфигурация SW:
ngsw-config.json
{
"index": "/index.html",
"assetGroups": [{
"name": "app",
"installMode": "prefetch",
"resources": {
"files": [
"/favicon.ico",
"/index.html"
],
"versionedFiles": [
"/*.bundle.css",
"/*.bundle.js",
"/*.chunk.js"
]
}
}, {
"name": "assets",
"installMode": "lazy",
"updateMode": "prefetch",
"resources": {
"files": [
"/assets/**"
]
}
}]
}
app.module.ts
imports: [
(...)
ServiceWorkerModule.register('/ngsw-worker.js', {enabled: environment.production})
],