2015-04-18 13 views
5

ho il seguente errore quando provo a registrare un operaio di servizio in un'applicazione di base servita da un Server Express V4 nodo/su Chrome 42:operaio di servizio Registro non riuscita con localhost

DOMException: Impossibile registrare un ServiceWorker: è stato ricevuto un codice di risposta HTTP errato (404) durante il recupero dello script. {messaggio: "Impossibile registrare un ServiceWorker: È stato ricevuto un brutto codice HTTP res (404) quando ha recuperato lo script.", nome: "NetworkError", codice: 19, INDEX_SIZE_ERR: 1, DOMSTRING_SIZE_ERR: 2 ...} codice: 19 messaggio: "Impossibile

Ecco il codice registro:

if ('serviceWorker' in navigator){ 
    console.log("SW present !!! "); 

    navigator.serviceWorker.register('worker.js', { 
     //scope: '/toto/' 
    }).then(function(registration){ 
     console.log('Service worker registered : ', registration.scope); 
    }) 
    .catch(function(err){ 
     console.log("Service worker registration failed : ", err); 
    }); 

    } 
+0

Vedere http://www.serviceworker.org/ – benek

risposta

9

Penso che si sta cercando di registrare inesistente lo script In questo caso il problema viene prego il vostro script.. percorso e percorso dell'ambito. Forse non hai alcun 'worker.js' nella directory in cui questo script esiste. Se questo è il caso, si prega di fornire percorso completo o provid e worker.js nella stessa directory.

+0

Grazie per la risposta. Non vedo nelle documentazioni una descrizione di alcun file conf js. Hai un riferimento? – benek

+1

Non riesco a trovare il file conf js. Dovresti utilizzare lo scriptURL corretto nella funzione di registro, come spiegato in https://developer.mozilla.org/en-US/docs/Web/API/ServiceWorkerContainer/register – Paritosh

0

Ho riscontrato questo errore anche durante l'utilizzo di un server express. Risulta che il problema era con la stessa configurazione del server, non con il codice di registrazione dell'operatore di servizio. Avevo detto a mia app espressa per ottenere index.html come la radice di default utilizzando:

app.get('/', function(req, res) { 
    res.sendFile(path.join(__dirname + '/index.html')); 
}); 

Tuttavia non avevo detto esprimono la posizione di qualsiasi altro file ho voluto che fosse in grado di utilizzare. In questa fase il mio unico altro file è il file operaio di servizio, che era seduto alla radice della directory così ho risolto il problema con l'aggiunta di questa riga al file server:

app.use(express.static(__dirname + '/')); 

per eseguire il debug se il problema è con il server stesso è possibile scaricare Web Server for Chrome e puntarlo nella directory principale della propria app. Verificare che il server sia avviato e fare clic sull'URL del server Web. Se la registrazione dell'assistente di servizio ha esito positivo, saprai che si tratta di un problema con la configurazione del server Express e non con il codice di registrazione dell'assistenza clienti.

Problemi correlati