# NAME Mojolicious::Plugin::ServiceWorker - plugin to add a Service Worker # SYNOPSIS # Mojolicious::Lite plugin 'ServiceWorker' => { route_sw => '/sw2.js', precache_urls => [ ], }; app->serviceworker->add_event_listener(push => <<'EOF'); function(event) { if (event.data) { console.log('This push event has data: ', event.data.text()); } else { console.log('This push event has no data.'); } } EOF # DESCRIPTION [Mojolicious::Plugin::ServiceWorker](https://metacpan.org/pod/Mojolicious::Plugin::ServiceWorker) is a [Mojolicious](https://metacpan.org/pod/Mojolicious) plugin. # METHODS [Mojolicious::Plugin::ServiceWorker](https://metacpan.org/pod/Mojolicious::Plugin::ServiceWorker) inherits all methods from [Mojolicious::Plugin](https://metacpan.org/pod/Mojolicious::Plugin) and implements the following new ones. ## register my $p = $plugin->register(Mojolicious->new, \%conf); Register plugin in [Mojolicious](https://metacpan.org/pod/Mojolicious) application, returning the plugin object. Takes a hash-ref as configuration, see ["OPTIONS"](#options) for keys. # OPTIONS ## route\_sw The service worker route. Defaults to `/serviceworker.js`. Note that you need this to be in your app's top level, since the service worker can only affect URLs at or below its "scope". ## debug If a true value, `console.log` will be used to indicate various events including SW caching choices. ## precache\_urls An array-ref of URLs that are relative to the SW's scope to load into the SW's cache on installation. The SW URL will always be added to this. ## network\_only An array-ref of URLs. Any fetched URL in this list will never be cached, and always fetched over the network. ## cache\_only As above, except the matching URL will never be re-checked. Use only where you cache-bust by including a hash in the filename. ## network\_first As above, except the matching URL will be fetched from the network every time and used if possible. The cached value will only be used if that fails. **Any URL not matching these three criteria** will be treated with a "cache first" strategy, also known as "stale while revalidate": the cached version will immediately by returned to the web client for performance, but also fetched over the network and re-cached for freshness. # HELPERS ## serviceworker.route my $route_name = $c->serviceworker->route; The configured ["route\_sw"](#route_sw) route. ## serviceworker.config my $config = $c->serviceworker->config; The SW configuration (a hash-ref). Keys: `debug`, `precache_urls`, `network_only`, `cache_only`, `network_first`. ## serviceworker.add\_event\_listener my $config = $c->serviceworker->add_event_listener(push => <<'EOF'); function(event) { if (event.data) { console.log('This push event has data: ', event.data.text()); } else { console.log('This push event has no data.'); } } EOF Add to the service worker an event listener. Arguments are the event name, and a JavaScript function expression that takes the correct args for that event. ## serviceworker.event\_listeners my $listeners = $c->serviceworker->event_listeners; Returns a hash-ref mapping event name to array-ref of function expressions as above. `install` and `fetch` are provided by default. # TEMPLATES Various templates are available for including in the app's templates: ## serviceworker-install.html.ep A snippet of JavaScript that will install the supplied service worker. Include it within a `script` element: # SEE ALSO [Mojolicious](https://metacpan.org/pod/Mojolicious), [Mojolicious::Guides](https://metacpan.org/pod/Mojolicious::Guides), [https://mojolicious.org](https://mojolicious.org).