Javascript 服务工作者中的缓存未定义

Javascript 服务工作者中的缓存未定义,javascript,node.js,caching,service-worker,html5-appcache,Javascript,Node.js,Caching,Service Worker,Html5 Appcache,我在注册我的服务人员时遇到问题。当我尝试注册它时,浏览器抱怨“未捕获(承诺中)TypeError:无法读取未定义的属性'addAll',它在第6行中断,我尝试将所有添加到缓存中。我认为open方法创建了cache对象,那么为什么它没有定义呢 "use strict"; self.addEventListener('install', event => { event.waitUntil( caches.open('test').then(function(cach

我在注册我的服务人员时遇到问题。当我尝试注册它时,浏览器抱怨“未捕获(承诺中)TypeError:无法读取未定义的属性'addAll',它在第6行中断,我尝试将所有添加到缓存中。我认为open方法创建了cache对象,那么为什么它没有定义呢

"use strict";

self.addEventListener('install', event => {
    event.waitUntil(
        caches.open('test').then(function(cache) {
        return cache.addAll([
            '/index.html',
            '/'
        ]);
    })
);
});

self.addEventListener('activate', event => {
event.waitUntil(self.clients.claim());
});

self.addEventListener('fetch', event => {
event.respondWith(
    caches.match(event.request).then(response => {
        return response || fetch(event.request);
    })
);
});

在您用来查看站点的浏览器中,缓存API似乎不起作用

我在通过VisualStudio启动自己的Chrome实例以调试模式启动web应用程序时遇到了这个错误。出于某种原因,缓存API在那里不起作用


我使用了在Chrome的常规实例中看到的地址,并且一切都正常运行。

我不确定您的站点和代码的托管位置设置如何,但我想我已经解决了这里的问题

我做了一些实验(版本73.0.3683.103(官方版本)(64位)),但chrome似乎不会让您访问或在不安全的来源上构建caches对象

不过,它似乎对localhost比较宽容

编辑:
在进一步挖掘信息/文档后,我无意中发现了一个漏洞,它也确认了被视为安全的。

今天早些时候,我们遇到了这个漏洞,我们最终在Chromium上发现了这个漏洞:

这里的根本原因(或至少一个根本原因)非常奇怪。如果在启动Chrome时,您或您的IDE将--user data dir开关设置为长度超过133个字符的路径,则服务工作者缓存API将启动,并始终返回未定义的。归根结底,这是因为用户数据目录中的缓存存储路径已经相当长,并且最终达到了Windows上260个字符的文件路径限制


如果您可以将--user data dir设置为比这个短的值,它应该可以正常工作。另一种选择是通过组策略在Windows上启用NTFS“长文件路径”。

缓存是Windows属性的一部分,但在新版javascript中,您可以通过以下方式直接访问它:

const{caches}=self;
更新:

web worker没有直接访问全局状态或DOM的权限,您必须使用
self
访问它,单击以获取有关的详细信息


欢迎:)

您使用的浏览器是否支持缓存api
?是的,我正在使用Chorme 61第二个“\”的缓存是什么?此评论帮助我解决了服务人员无法使用本地缓存时遇到的问题,服务人员依赖于本地缓存,在Visual Studio生成的Chrome窗口的上下文中无法正常工作。我正准备提出一个Chrome错误,因为。。。这种行为太愚蠢了。他们至少可以在错误消息中告诉您缓存API在此实例中不起作用。260个字符的路径是任何人都需要的