35

In app.js, I am checking the serviceWorker existence in navigator object and if available then registering the SW.

if ('serviceWorker' in navigator) {
    navigator.serviceWorker.register('./service-worker.js', { scope: './' })
        .then(function(registration) {
            console.log("Service Worker Registered!");
        }).catch(function(err) {
            console.log("Service Worker not registered!", err);
        });
}

When trying to register SW, I receive the below error in Firefox. I also made sure the service-worker.js file is under src directory.

enter image description here

Checking my about:config in Firefox (version 59.0.2) I had service worker and storage api enabled. So that shouldn't be an issue.

enter image description hereenter image description here

PS: The same code works fine on Chrome.

Rama Adaikkalam
  • 665
  • 1
  • 7
  • 14

7 Answers7

25

Did you check the cookie setting in about:preferences#privacy, it must be 'keep until they expire', if you have 'keep until I close firefox' selected sw will not register.

enter image description here

you can find details on this thread: https://bugzilla.mozilla.org/show_bug.cgi?id=1429714

Stef Chäser
  • 1,911
  • 18
  • 26
  • 1
    Where is this setting in firefox developer edition or firefox Quantum, I can't find it in about:preferences#privacy? – Ryan Stone Feb 08 '20 at 16:55
  • 23
    If it is Necessary for us as developers to enable these settings in both About:Config & about:preferences#privacy to get Service workers to actually work or register then Won't they be broken or Not register for nearly all users who actually visit the site, seeing as most people who aren't developers wont have these settings enabled? – Ryan Stone Feb 08 '20 at 17:32
  • I don't know why it is so hard to enable service workers in Firefox. I am using MSW to prototype FE stuff at work and we have been forced to use only chromium browsers for this phase due to the nightmare that makes it impossible for us to enable msw ourselves for prototyping. Imagine if we would be using a service worker in production for production needs? – Arp Jul 05 '23 at 03:33
12

The same error message also appears in Firefox, if the serviceworker's file is delivered with a wrong MIME-Type. In that case setting the right MIME-Type fixes the problem. Wrong MIME-Type can happen, if you deliver the serviceworker's file dynamically e.g. using PHP.

Correct MIME-Type must be

Content-Type: application/javascript; charset=UTF-8
Gerold Broser
  • 14,080
  • 5
  • 48
  • 107
Tom
  • 281
  • 4
  • 7
4

You can keep "Delete cookies and site data when Firefox is closed" checked, as long as you create an exception for your site. (Tested in Firefox 78.0.2):

Delete cookies and site data when Firefox is closed

Click on Manage Permissions... and enter a URL (e.g. localhost:8000). Click Allow, then click Save Changes in the bottom right corner. Service workers (and cookies etc.) should now work for this URL, but not for other URLs.

Developers, note that localhost is not the same as e.g. localhost:8000 (you need to specify the port number).

Gerold Broser
  • 14,080
  • 5
  • 48
  • 107
Bruno
  • 41
  • 1
3

When you serve the service worker file itself, often you will need to host it with a Service-Worker-Allowed http header. If the value of this header does not match what you're trying to register the service worker with in Javascript, or if you are trying to register for a scope that is beyond what the browser considers 'secure', then you will get this error.

Happened to me more than once and I wound up here each time. At the very least I'm helping myself out for next time!

OffTheBricks
  • 425
  • 2
  • 9
2

For Firefox 80, I went to about:Config and verified that dom.serviceWorkers.enabled is set to true enter image description here

then I went to about:preferences#privacy and unchecked Delete cookies and site data when Firefox is closed, from Mozilla enter image description here

thenewjames
  • 966
  • 2
  • 14
  • 25
2

In my case, I deleted all the previous data related to this site (cookies, cache, etc.) Then, Firefox allowed me to register the new service worker.

K M
  • 31
  • 1
  • 4
2

In my case, the error DOMException: The Operation is insecure occured when calling navigator.credentials.create().

Here are a few possible reasons:

With https://localhost/ and a self-signed (the XAMPP defaults) certificate, instead of http://127.0.0.1:82/, the error was solved.

BurninLeo
  • 4,240
  • 4
  • 39
  • 56