2017-11-02 10 views
0

画像をキャッシュするサービスワーカーがいますが、このサービスワーカーはフロントエンドテンプレート内にのみ登録されていますが、それでも管理用テンプレートには広がっています。サービスワーカーが広がっています

これにより、検証トークンが影響を受けるため、フォームが予期せず動作するようになります。

いくつかのconsole.logでは、インストールされたイベントが要求されたページに到達する前にトリガーされたと考えましたが、そこに現在の/次のURLを特定できません。

サービスワーカーが管理パネルに広がってページを妨害するのを防ぐにはどうすればよいですか?私はちょうど資産だけがキャッシュされるようにしたい。

これは私のサービスワーカーは限りそれが関連しているようです:

const PRECACHE = 'precache-v1.0.0'; 
const RUNTIME = 'runtime'; 

// A list of local resources we always want to be cached. 
const PRECACHE_URLS = [ 
    "public", 
    "media", 
    "unify", 
]; 

importScripts('./cache-polyfill.js'); 

// The install handler takes care of precaching the resources we always need. 
self.addEventListener('install', function(event) { 
    console.log('installing resources'); 
    event.waitUntil(
     caches.open(PRECACHE) 
      //.then(cache => cache.addAll(PRECACHE_URLS)) 
      .then(self.skipWaiting()) 
    ); 
}); 

// The activate handler takes care of cleaning up old caches. 
self.addEventListener('activate', function(event) { 
    const currentCaches = [PRECACHE, RUNTIME]; 
    event.waitUntil(
     caches.keys().then(cacheNames => { 
      return cacheNames.filter(cacheName => !currentCaches.includes(cacheName)); 
     }).then(cachesToDelete => { 
      return Promise.all(cachesToDelete.map(cacheToDelete => { 
       return caches.delete(cacheToDelete); 
      })); 
     }).then(() => self.clients.claim()) 
    ); 
}); 

// The fetch handler serves responses for same-origin resources from a cache. 
// If no response is found, it populates the runtime cache with the response 
// from the network before returning it to the page. 
self.addEventListener('fetch', event => { 
    // Skip cross-origin requests, like those for Google Analytics. 

    if (event.request.method === "GET") { 
     if (event.request.url.indexOf(PRECACHE_URLS) > -1) { 
      console.log("fetching " + event.request.url + " by the service worker"); 
      event.respondWith(
       caches.match(event.request).then(cachedResponse => { 
        if (cachedResponse) { 
         return cachedResponse; 
        } 

        return caches.open(RUNTIME).then(cache => { 
         return fetch(event.request).then(response => { 
          // Put a copy of the response in the runtime cache. 
          return cache.put(event.request, response.clone()).then(() => { 
           console.log('cached: ' + event.request.url); 
           return response; 
          }); 
         }); 
        }); 
       }) 
      ); 
     } 
     else { 
      console.log("fetching " + event.request.url + " by service worker blocked, it's not a resource"); 
     } 
    } 
    return fetch(event.request); 
}); 

答えて

1

問題は、あなたの管理ページは、SWの範囲内にある可能性が最も高いです。これは、あなたのSWコントロール、例えば、 /と管理ページのすべては、/ admin /などにあります。

SWが傍受しているフェッチ要求をチェックすることで、この動作を防ぐことができます。次のようなものがあります。

if (event.request.url.match('^.*(\/admin\/).*$')) { 
    return false; 
} 

これは、SWのフェッチリスナーの最初のものです。それは、管理ページから何かの要求を受けたかどうかをチェックし、それがあった場合は取り消します。それ以外の場合は正常に続きます。

関連する問題