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 is a Mojolicious plugin.
METHODS
Mojolicious::Plugin::ServiceWorker inherits all methods from Mojolicious::Plugin and implements the following new ones.
register
my $p = $plugin->register(Mojolicious->new, \%conf);
Register plugin in Mojolicious application, returning the plugin object. Takes a hash-ref as configuration, see "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.
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:
<script>
%= include 'serviceworker-install'
</script>