[conception] Un plugin Progressive Web App commun en coquille vide ? (1 SW 2 rule dem all)
RastaPopoulos <[email protected]>
| Newsgroups | gmane.comp.web.spip.devel |
|---|---|
| Message-ID | <[email protected]> |
Après une semaine de diverses recherches, voici où j'en suis. Celleux qui s'intéressent à la question (notamment Cédric car Offline), merci de me dire ce que vous en pensez. :) Rappel : une PWA, ce n'est pas une fonctionnalité précise, mais un ensemble de fonctionnalités JS qui augmentent les capacités d'un site web pour lui permettre des choses que seules les applis natives pouvaient faire avant. Et comme son nom l'indique : ça peut être progressif, on peut ajouter petit à petit des choses. Ça peut être : - garder en mémoire des pages pour lire même déconnecté - synchroniser des données régulièrement - s'inscrire à des notifications push (qui arrivent donc même quand on n'a pas ouvert le site) Point important 1 : on peut vouloir *une seule ou plusieurs* de ces fonctionnalités. C'est forcément modulaire, ya aucune obligation d'avoir tout. Cependant elles utilisent un truc commun : un service worker, un programme JS qui tourne chez la personne en parallèle du site. Point important 2 : il ne peut y avoir QU'UN service worker pour une même "branche" de l'arbo des URL. Et par défaut la portée est celle du dossier/URL où se trouve le fichier JS. Par exemple s'il est dans exemple.com/javascript/sw.js alors par défaut il ne pourrait servir que pour les requêtes sous exemple.com/javascript/… Si le fichier est à la racine du site, alors la portée par défaut est "tout le site". Le plugin Offline de Nursit, fait pour le Diplo et utilisé en test grandeur nature sur Contrib, ajoute la fonctionnalité "lecture hors ligne" : https://git.nursit.net/open/offline (au passage maintenant qu'on a git, est-ce qu'il pourrait être dans la communauté ?) Ce plugin ajoute donc UN service worker, pour TOUT le site, mais seulement pour la fonctionnalité "hors ligne". Du coup quand on veut ajouter une autre fonctionnalité, les pushs par ex, il est impossible d'avoir un autre SW pour la même portée. J'ai bien cherché s'il était possible de coder les pushs dans un SW avec une portée bidon car ya pas à capter les requêtes (événement "fetch") on s'en fout. Mais impossible d'avoir une réponse exacte à ça et la doc dit plutôt le contraire : https://developer.mozilla.org/fr/docs/Web/API/PushEvent > Cet événement est envoyé au scope global d'un ServiceWorker Je propose donc que SPIP ait un plugin "pwa" commun, qui va mutualiser : - la génération d'un fichier JS de service worker ayant une portée globale - mais ce fichier serait VIDE par défaut, et ce sont à des sous-plugins comme Offline ou Webpush d'ajouter du JS pour capter des événements dedans (qui "fetch", qui "push", etc) - l'inscription de ce SW dans le site - la désinstallation - la gestion de la version, comme le fait déjà Offline et donc la mise à jour chez les gens : cela se ferait si on ajoute ou retire un sous-plugin qui s'insère dans son JS + quand des sous-plugins le demandent en plus (comme Offline quand on a une version de site qui change) - comme ce serait LE plugin commun, c'est aussi là qu'on déclarerait le "manifest" permettant d'installer le site-appli sur l'accueil des mobiles (comme tout autre appli) Il faudra donc modifier Offline pour s'insérer dedans, et non plus fournir son propre service worker. -- RastaPopoulos _______________________________________________ liste: https://listes.rezo.net/mailman/listinfo/spip-dev doc: https://www.spip.net/ dev: https://core.spip.net/ irc://irc.freenode.net/spip