Service-Worker,&#34; TypeError:请求在<anonymous>&#34;

时间:2018-02-16 14:29:04

标签: html browser-cache basic-authentication service-worker http-status-code-401

我希望你能解决我的问题。 目前,我与服务工作者建立了PWA。它注册成功,但安装有问题。

&#34; caches.open&#34; -promise会导致错误:&#34; TypeError:请求在&#34;处失败。您可以在Chrome中看到缓存已注册,但为空。 我已经检查了缓存网址数千次..

这是我的服务工作者代码

var CACHE_NAME = 'surv-cache-1';

var resourcesToCache = [
    '/',
    '/index.html',
    '/jquery-3.2.1.min.js',
    '/pouchdb.min-6.4.1.js',
    '/styles/inline.css',
    '/scripts/app.js'
];

self.addEventListener('install', function(event) {
  event.waitUntil(
    // open the app browser cache
    caches.open(CACHE_NAME).then(function(cache) {
        console.log("Install succesfull");
        // add all app assets to the cache
        return cache.addAll(resourcesToCache);
    }).then(function(out){
        console.log(out);
    }).catch(function(err){
        console.log(err);
    })
  );
});

self.addEventListener('fetch', function(event) {
  event.respondWith(
    // try to find corresponding response in the cache
    caches.match(event.request)
      .then(function(response) {
        if (response) {
          // cache hit: return cached result
          return response;
        }

        // not found: fetch resource from the server
        return fetch(event.request);
      }).catch(function(err){
          console.log(err);
      })
  );
});

我的注册码:

<script>
    if ('serviceWorker' in navigator) {
        navigator.serviceWorker.register('service-worker.js').then(function(registration) {
            console.log('Service worker registered:'+registration.scope);
        }).catch(function(e) {
            console.log(e);
        });
    };

我没有得到它......我希望你有一个想法:)

编辑:我想我现在知道为什么它不起作用。我对我的域名进行了身份验证,因此并非每个人都可以访问它。  当我的服务工作者想要缓存数据时,它会恢复401。所以这似乎是身份验证的问题。

也许某人已经有同样的问题?

3 个答案:

答案 0 :(得分:5)

resourcesToCache包含返回404响应的内容时会发生这种情况。确保所有内容都正确输入。还要确保范围正确。您可以使用以下方法检查您的工作范围:

if("serviceWorker" in navigator) {
  navigator.serviceWorker
  .register(`worker.js`)
  .then(registration => {
    console.log("SW scope:", registration.scope);
  });
}

如果您的项目不在您的服务器域根目录中,那么执行此类操作可能有所帮助:

//your main js
if("serviceWorker" in navigator) {
  navigator.serviceWorker
  .register(`${window.location.pathname}worker.js`)
  .then(registration => {
    //do your thing
  });
}


//your worker js
let resourcesToCache = [
  './',
  './index.html',
  './jquery-3.2.1.min.js',
  './pouchdb.min-6.4.1.js',
  './styles/inline.css',
  './scripts/app.js',
];
//...

作为旁注,您应该从CDN加载库(jQuery,pouchdb)以提高性能。这些也可以缓存:

let resourcesToCache = [
  './',
  './index.html',
  'https://code.jquery.com/jquery-3.3.1.min.js',
  'https://cdnjs.cloudflare.com/ajax/libs/pouchdb/6.4.3/pouchdb.min.js',
  './styles/inline.css',
  './scripts/app.js',
];

答案 1 :(得分:2)

当我在Windows机器上本地开发并在linux服务器上进行部署时,这发生在我身上,问题出在路径上。您需要添加一个“。”使其变为“ ./”之前,如下所示:

@ManyToOne

];

答案 2 :(得分:0)

当我引用用于缓存的文件(在指定的路径中不存在)时,这发生在我身上。当我更新文件的路径时,一切正常。