Je veux poser des questions sur les travailleurs de service. J'ai fait une application web et j'essaie de mettre en place un service worker. J'utilise .hbs pour la disposition de mes vues et lorsque je cache des fichiers statiques, je ne peux pas mettre en cache les fichiers .hbs, .css et .js.node.js - comment Caching handlebars.js utilisant le travailleur de service
Voici comment j'enregistrer mon fichier:
public/
css/
style.css
js/
app.js
manifest.json
service-worker.js
views/
home.hbs
partial/
header.hbs
Quand je déploie mon application, il ne parvient pas à mettre en cache la home.hbs, style.css et mon fichier app.js; Je ne peux pas accéder à mon site Web hors ligne.
Que dois-je faire pour le réparer?
Ceci est mon app.js:
if ('serviceWorker' in navigator) {
navigator.serviceWorker
.register('./service-worker.js', { scope: './service-worker.js' })
.then(function(registration) {
console.log("Service Worker Registered");
})
.catch(function(err) {
console.log("Service Worker Failed to Register", err);
})
}
var get = function(url) { return new Promise(function(resolve, reject) {
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function() {
if (xhr.readyState === XMLHttpRequest.DONE) {
if (xhr.status === 200) {
var result = xhr.responseText
result = JSON.parse(result);
resolve(result);
} else {
reject(xhr);
}
}
};
xhr.open("GET", url, true);
xhr.send();
}); };
c'est mon service-worker.js
var cacheName = 'v1';
var cacheFiles = [
'./',
'./home',
'./login',
'./welcome',
'./register',
'./css/styles.css',
'./js/app.js',
'./images/fb-logo.png',
'./images/g-logo.png',
'./images/t-logo.png',
'./images/logofix.png',
'./images/icon192.png',
'https://ajax.googleapis.com/ajax/libs/angularjs/1.6.4/angular.min.js',
'https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css',
'https://fonts.googleapis.com/css?family=Ubuntu:300,400,500,700',
'https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js'
];
self.addEventListener('install', function(e) {
console.log('[ServiceWorker] Installed');
// e.waitUntil Delays the event until the Promise is resolved
e.waitUntil(
// Open the cache
caches.open(cacheName).then(function(cache) {
// Add all the default files to the cache
console.log('[ServiceWorker] Caching cacheFiles');
return cache.addAll(cacheFiles);
})
); // end e.waitUntil
});
self.addEventListener('activate', function(e) {
console.log('[ServiceWorker] Activated');
e.waitUntil(
// Get all the cache keys (cacheName)
caches.keys().then(function(cacheNames) {
return Promise.all(cacheNames.map(function(thisCacheName) {
// If a cached item is saved under a previous cacheName
if (thisCacheName !== cacheName) {
// Delete that cached file
console.log('[ServiceWorker] Removing Cached Files from Cache - ', thisCacheName);
return caches.delete(thisCacheName);
}
}));
})
); // end e.waitUntil
});
self.addEventListener('fetch', function(e) {
console.log('[ServiceWorker] Fetch', e.request.url);
// e.respondWidth Responds to the fetch event
e.respondWith(
// Check in cache for the request being made
caches.match(e.request)
.then(function(response) {
// If the request is in the cache
if (response) {
console.log("[ServiceWorker] Found in Cache", e.request.url, response);
// Return the cached version
return response;
}
// If the request is NOT in the cache, fetch and cache
var requestClone = e.request.clone();
fetch(requestClone)
.then(function(response) {
if (!response) {
console.log("[ServiceWorker] No response from fetch ")
return response;
}
var responseClone = response.clone();
// Open the cache
caches.open(cacheName).then(function(cache) {
// Put the fetched response in the cache
cache.put(e.request, responseClone);
console.log('[ServiceWorker] New Data Cached', e.request.url);
// Return the response
return response;
}); // end caches.open
})
.catch(function(err) {
console.log('[ServiceWorker] Error Fetching & Caching New Data', err);
});
}) // end caches.match(e.request)
); // end e.respondWith
});
Que dois-je faire si je peux mettre en cache le fichier .hbs? merci
Que se passe exactement en termes de « ne parvient pas à mettre en cache la home.hbs, style.css et mon application. Fichier js "? Comment savez-vous qu'il échoue? –
Salut! @GauntFace merci beaucoup la réponse. quand j'ai mis en cache les fichiers home.hbs, style.css et app.js, le statut n'est pas 200. le statut est 304. comme ceci [capture d'écran] (https://drive.google.com/file/d/0BzsmISVHZSW-UHVtRjIyUng0S1k/ afficher? usp = partage) lorsque j'essaie de recharger la page lorsque la connexion Internet est hors ligne je ne peux pas accéder à ma page. J'essaie de faire un fabio sugestion. et son me donner 404 erreur. – Ridhogillang
Pouvez-vous utiliser Chrome DevTools pour charger la page avec votre technicien de maintenance, allez à t DevTools> application> service worker et vérifiez qu'il enregistre réellement l'agent de service. Si c'est le cas, faites un clic droit sur "caches"> "Refresh Caches" dans l'onglet de l'application et voyez s'il y a des caches et si quelque chose est mis en cache. –