2017-10-20 7 views
0

J'ai un serviceWorker hébergé à la racine '/' qui dessert une application web. Une autre application est en cours de traitement sur '/ otherapp'. Le problème que j'ai est que le serviceWorker intercepte le trafic qui irait à '/ otherapp'. Je sais que le paramètre 'scope' dans serviceWorker.register est par défaut './', mais je cherche un moyen de dire à serviceWorker d'autoriser toute requête à '/ otherapp' à être ignorée, et de prendre tout le reste. La seule chose que je peux penser est d'utiliser un certain type d'expression régulière, mais je ne vois pas de documents ou de sujets sur les gens qui font cela. Des idées?Pour les agents de service, est-il possible d'utiliser des expressions régulières dans le champ serviceWorker.register 'scope'?

+1

Je ne suis pas sûr qu'une expression régulière aiderait ici. Cela semble plus une question de savoir si une sous-portée peut être ignorée, et autant que je sache, la réponse est non. Vous pouvez ignorer 'FetchEvent' venant de'/otherapp' mais vous devrez le faire manuellement. Vous pouvez utiliser le referrer de la demande, ou peut-être plus sûrement 'clientId' sur l'objet événement avec [' clients.get'] (https://developer.mozilla.org/fr-fr/docs/Web/API/Clients /obtenir). –

Répondre

0

Vous ne pouvez pas spécifier une expression régulière dans la portée du service worker. Ce que vous pouvez faire est d'appliquer votre regex dans le gestionnaire d'événements fetch pour contrôler ce qui est mis en cache, combien de temps il est mis en cache, etc. C'est là que vous obtenez toutes sortes de contrôles.

Mon conseil est de refactoriser la logique du gestionnaire d'événements, éventuellement à une classe pour vous aider à gérer le code et la logique un peu plus facile.

Vous pouvez créer différentes stratégies de mise en cache basées sur différentes routes basées sur une ou plusieurs expressions régulières. Pensez-y de cette façon, les travailleurs du service sont comme un mini serveur web dans votre navigateur. Tout comme si vous étiez en train de concevoir quelque chose comme nœud express, ASP.NET MVC ou Ruby on Rails, vous auriez besoin d'utiliser un gestionnaire d'itinéraire pour récupérer la bonne réponse. Vous devez faire la même chose dans votre agent de service.