Giter Site home page Giter Site logo

cordova-plugin-service-worker's Introduction

Service Worker Plugin for iOS

This plugin adds Service Worker support to Cordova apps on iOS. To use it:

  1. Install this plugin.

  2. Create sw.js in your www/ directory.

  3. Add the following preference to your config.xml file:

    <preference name="ServiceWorker" value="sw.js" />
    

That's it! Your calls to the ServiceWorker API should now work.

Cordova Asset Cache

This plugin automatically creates a cache (called Cordova Assets) containing all of the assets in your app's www/ directory.

To prevent this automatic caching, add the following preference to your config.xml file:

<preference name="CacheCordovaAssets" value="false" />

Examples

One use case is to check your caches for any fetch request, only attempting to retrieve it from the network if it's not there.

self.addEventListener('fetch', function(event) {
    event.respondWith(
        // Check the caches.
        caches.match(event.request).then(function(response) {
            // If the response exists, return it; otherwise, fetch it from the network.
            return response || fetch(event.request);
        })
    );
});

Another option is to go to the network first, only checking the cache if that fails (e.g. if the device is offline).

self.addEventListener('fetch', function(event) {
    // If the caches provide a response, return it.  Otherwise, return the original network response.
    event.respondWith(
        // Fetch from the network.
        fetch(event.request).then(function(networkResponse) {
            // If the response exists and has a 200 status, return it.
            if (networkResponse && networkResponse.status === 200) {
                return networkResponse;
            }

            // The network didn't yield a useful response, so check the caches.
            return caches.match(event.request).then(function(cacheResponse) {
                // If the cache yielded a response, return it; otherwise, return the original network response.
                return cacheResponse || networkResponse;
            });
        })
    );
});

Caveats

  • Having multiple Service Workers in your app is unsupported.
  • Service Worker uninstallation is unsupported.
  • IndexedDB is unsupported.

Release Notes

1.0.1

  • Significantly enhanced version numbering.

1.0.0

  • Initial release.

cordova-plugin-service-worker's People

Contributors

agrieve avatar clelland avatar hgenru avatar imintz avatar mmocny avatar mwoghiren avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

cordova-plugin-service-worker's Issues

Is that plugin in current development ?

I tried service worker for ios - Ionic application and it seems not able to even register SW. Being said that I don't think it is really a solution for ios devices to support Service worker Fetch or push features.

Building for cordova-ios 4.0.0 and wkWebView beta fails

/Plugins/cordova-plugin-service-worker/CDVServiceWorker.m:141:19: warning: 
      unused variable 'options' [-Wunused-variable]
    NSDictionary *options = [command argumentAtIndex:1];
                  ^
/Plugins/cordova-plugin-service-worker/CDVServiceWorker.m:285:32: error: 
      no known class method for selector 'dataFromBase64String:'
        NSData *data = [NSData dataFromBase64String:[response[@"body"] toString]];
                               ^~~~~~~~~~~~~~~~~~~~

Registration Failed

I get this error "ServiceWorker registration failed: The script URL must be at the root", even if the script is in the www directory (no subfolders).
Any ideas?

Android version

Hi,

What do you think about an Android version for this plugin? I am a very beginner on cordova plugin, and I don't even know if it is feasible.

Updating sw.js

From what I understand the service worker script gets bundled with the app. Is there any way to update it without submitting a new version to the App Store?

Fetch response contains wrong headers

Hello.
Thank you for great plugin!
It looks like response.headers contains request headers instead of response headers. Simple code to see that request and response headers are same:

self.addEventListener('fetch', function(event) {
    event.respondWith(
        fetch(event.request).then(function(response) {
            console.log('request headers:');
            console.log(JSON.stringify(event.request.headers));
            console.log('response headers:');
            console.log(JSON.stringify(response.headers));
        })
    );
});

Build failure

...Plugins/cordova-plugin-service-worker/CDVServiceWorker.m:285:32: error:
      no known class method for selector 'dataFromBase64String:'
        NSData *data = [NSData dataFromBase64String:[response[@"body"] toString]];
                               ^~~~~~~~~~~~~~~~~~~~
1 warning and 1 error generated.

This can be fixed by replacing that line with the line below:

NSData *data = [[NSData alloc] initWithBase64EncodedString:[response[@"body"] toString] options:0];

Installation fails because of PromisesPlugin dependency.

Running cordova plugin add cordova-plugin-service-worker --save fails due to upstream configuration error.

Saved plugin info for "cordova-plugin-service-worker" to config.xml
Installing "cordova-plugin-service-worker" for ios
Fetching plugin "https://github.com/vstirbu/PromisesPlugin.git" via git clone
Repository "https://github.com/vstirbu/PromisesPlugin.git" checked out to git ref "master".
Failed to install 'cordova-plugin-service-worker':Error: Expected plugin to have ID "com.vladstirbu.cordova.promise" but got "es6-promise-plugin".

Misconfigured plugin causes the app to fail

If the <preference> tag is not present in config.xml, or the named service worker script doesn't exist, then the fetch queue is never processed at all, and the application will white-screen on startup.

We need to handle this in a more robust manner. If the plugin cannot initialize properly, then it should not install the fetch delegate, and any serviceworker registration calls should return a rejected promise.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.