2016-12-12 5 views
0

Ich habe ein PWA in SharePoint Online gehostet.Service-Mitarbeiter holen mit Authentifizierung

Beschreibung: https://weblogs.asp.net/soever/spa-series-turn-our-showtitle-app-into-a-progressive-web-app

-Code-Repository: https://github.com/svdoever/sharepoint-progressive-web-apps/tree/master/ShowTitleProgressiveWebApp

Ich benutze einen Servicemitarbeiter, wo ich versuche, Ressourcen zu implementieren Caching von Abrufanforderungen auch an der gleichen Stelle zu leben. Diese Abrufanforderungen haben Authentifizierung zu gehorchen getan gegen die Sharepoint Online STS-Server, und ich bekomme die Fehler, wie im Screenshot unten gezeigt:

"requests are blocked by CORS policy" errors

Ich habe keine Ahnung, wie zu verhindern „Anfragen werden blockiert durch CORS-Richtlinie "Fehler und Caching funktioniert. Werden Berechtigungsnachweis-Header nicht vom Abruf der Webseite an den Service-Mitarbeiter-Abruf übergeben?

Mein Service Arbeiter Code ist wie folgt:

/* code from https://developers.google.com/web/fundamentals/getting- started/primers/service-workers */ 

var CACHE_NAME = 'sptitle-cache-v1'; 
var urlsToCache = [ 
    'favicon-16x16.png', 
    'index.html', 
    'es6-promise.min.js', 
    'fetch.min.js' 
]; 

self.addEventListener('install', function (event) { 
    console.log('Service Worker installing.'); 
    // Perform install steps 
    event.waitUntil(
     caches.open(CACHE_NAME) 
      .then(function (cache) { 
       console.log('Opened cache'); 
       return cache.addAll(urlsToCache); 
      }) 
    ); 
}); 

self.addEventListener('activate', function(event) { 
    console.log('Service Worker activating.'); 
}); 

self.addEventListener('fetch', function (event) { 
    console.log("service worker intercepting fetch()"); 
    event.respondWith(
     caches.match(event.request) 
      .then(function (response) { 
       // Cache hit - return response 
       if (response) { 
        console.log('respond from cache for url ' + response.url); 
        return response; 
       } 
       // IMPORTANT: Clone the request. A request is a stream and 
       // can only be consumed once. Since we are consuming this 
       // once by cache and once by the browser for fetch, we need 
       // to clone the response. 
       var fetchRequest = event.request.clone(); 
       console.log("fetching request: " + fetchRequest); 
       return fetch(fetchRequest).then(
        function (response) { 
         // Check if we received a valid response 
         if (!response || response.status !== 200 || response.type !== 'basic') { 
          //console.log("Invalid response from fetch(): ", response); 
          return response; 
         } 

         // IMPORTANT: Clone the response. A response is a stream 
         // and because we want the browser to consume the response 
         // as well as the cache consuming the response, we need 
         // to clone it so we have two streams. 
         var responseToCache = response.clone(); 

         caches.open(CACHE_NAME) 
          .then(function (cache) { 
           console.log("Cache the fetched response for request ", event.request); 
           cache.put(event.request, responseToCache); 
          }); 

         return response; 
        } 
       ); 
      } 
      ) 
    ); 
}); 

Antwort

0

Sie müssen passieren no-cors Credential-Modus manuell in der Anforderung holen.

d.h Rückkehr holen (fetchRequest, {Modus: 'no-cors'}). Dann

weil Sie Cross-Origin-Anfrage zugreifen möchten.

Verwandte Themen