2015-09-02 1 views
2

Je tente de détecter l'erreur 404 d'images avec un technicien de maintenance. Existe-t-il un moyen de récupérer le code d'état d'une image?Code d'état de l'image de l'agent de service

self.addEventListener('fetch', function(event) { 

    console.log('Handling fetch event for %s', event.request.url); 

    event.respondWith(
     fetch(event.request).then(function(response) { 

      if (response.status == 200) { 
       return response;      
      } 
      else { 
       /* return some default image */ 
      } 

     })   
    ); 

}); 

Ce code fonctionne bien avec des fichiers html, mais quand il va chercher une image, le code d'état est toujours 0. Est-il possible d'obtenir le code d'état des images? J'ai enlevé le cache et tout le reste pour rendre mon exemple simple.

Ceci est la page d'exemple que j'essayé de charger:

<body> 
    <!-- This image is working --> 
    <img src="http://www.google.ca/images/srpr/logo11w.png"> 
    <!-- This image returns 404 --> 
    <img src="http://www.google.ca/images/srpr/00000.png"> 
</body> 

Ainsi, la page html lui-même le statut est 200, mais les deux images statut retour de 0.

Répondre

3

Vous obtenez un opaque filtered response, ce qui est prévu lorsque votre requête n'utilise pas CORS. Le status de 0 est intentionnellement vague dans ce cas-là - si un code d'état réel était utilisé, alors des informations qui autrement ne seraient pas disponibles sans CORS fuiraient.

Il y a un peu d'arrière-plan dans ce fetch spec issue.

2

Selon the fetch spec, un état 0 représente une erreur. Vous voudrez peut-être vérifier le message d'état. Je suppose que c'est une erreur liée à CORS, puisque vous récupérez à partir d'un site tiers. De Matt Gaunt de Introduction to Service Worker:

Par défaut, aller chercher une ressource à partir d'une URL tierce partie échouera si elle ne prend pas en charge CORS. Vous pouvez ajouter une option non-CORS à la demande pour résoudre ce problème, bien que cela provoque une réponse «opaque», ce qui signifie que vous ne serez pas en mesure de dire si la réponse a été réussie ou non.

Essayez de définir mode: 'no-cors' comme il le suggère ici.