Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/436.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在域下导航时停止添加未在Service Worker中声明的内容_Javascript_Caching_Service Worker_Progressive Web Apps - Fatal编程技术网

Javascript 如何在域下导航时停止添加未在Service Worker中声明的内容

Javascript 如何在域下导航时停止添加未在Service Worker中声明的内容,javascript,caching,service-worker,progressive-web-apps,Javascript,Caching,Service Worker,Progressive Web Apps,我有一些服务人员按照预期工作,主要是按照指示获取、缓存和请求内容 但是,我注意到,除了指定的内容之外,例如在服务工作者中声明的文件/文件夹,在域中导航时,未声明的内容会添加到缓存中 顺便说一下,这是一个问题,它会使缓存空间膨胀,通常我不希望缓存它 在域下导航时,如何停止服务工作者内容添加未声明的内容 这是th SW的安装代码,它负责添加内容 // Declaring cache name, version, files to be cached. self.addEventListener('

我有一些服务人员按照预期工作,主要是按照指示获取、缓存和请求内容

但是,我注意到,除了指定的内容之外,例如在服务工作者中声明的文件/文件夹,在域中导航时,未声明的内容会添加到缓存中

顺便说一下,这是一个问题,它会使缓存空间膨胀,通常我不希望缓存它

在域下导航时,如何停止服务工作者内容添加未声明的内容

这是th SW的安装代码,它负责添加内容

// Declaring cache name, version, files to be cached.
 self.addEventListener('install', function(e) {
  console.log('[ServiceWorker] Install');
  e.waitUntil(
     caches.open(CACHE_NAME).then(function(cache) {
          console.log('[ServiceWorker] DTL Install Caching App Shell');
          return Promise.all([cache.addAll(FILES_TO_CACHE)]);
      }).then(function() {
          //skiWaiting, forza instalacion de SW.
          return self.skipWaiting();
      })
  );
 });  
在导航到域的其他文件夹(但未在要缓存的内容数组中声明)时,会像往常一样触发fetch事件,以下代码是:

self.addEventListener('fetch', function(event) {
 console.log('SW DTL fetch');                                                                                                                                                              
  event.respondWith(
     caches.open(CACHE_NAME).then(function(cache) {
         return fetch(event.request).then(function(response) {
             cache.put(event.request, response.clone());
             return response;
         });
      })
  );      
});  
您不必阻止任何操作,因为默认情况下,Service Worker不会自动将项添加到缓存中。实际上,您正在使用
fetch
处理程序中的方法手动将项添加到缓存中

你应该使用的是

您不必阻止任何操作,因为默认情况下,Service Worker不会自动将项添加到缓存中。实际上,您正在使用
fetch
处理程序中的方法手动将项添加到缓存中

你应该使用的是

event.respondWith(
    caches.match(event.request).then(function (response) {
        // return the response if it is found in cache
        if (response) return response;

        // fall back to network as usual otherwise
        console.log('SW: No response found in cache. About to fetch from network...');
        return fetch(event.request).then(function (response) {
            return response;
        });
    })
);