服务工作者安装失败:"无法读取属性' addAll of undefined"

时间:2017-06-07 04:09:11

标签: javascript asp.net service-worker

所以我会保持这种简洁:在尝试安装时,我的服务工作者会失败。这是sw.js中的所有代码:

var cacheName = 'randomstring';
var filesToCache = [ '/' ];

self.addEventListener('install', function (e) {
    console.log('[ServiceWorker] Install');
    e.waitUntil(
        caches.open(cacheName)
            .then(function (cache) {
                console.log('[ServiceWorker] About to fail');
                return cache.addAll(filesToCache);
            })
    );
});

我收到异常,因为cacheundefined(位于cache.addAll位)。

不确定为何会出现这种情况?

之前我曾使用过服务工作者,从未遇到过这个问题。这是我第一次使用带有ASP.Net后端的服务工作者,所以不确定这是不是问题?

2 个答案:

答案 0 :(得分:8)

所以,我想出来了。我打算投票来结束这个问题,但我想我会把它留在这里,因为我看到其他一些人不知道如何解决这个问题。即使它是超级愚蠢的:)(或者更确切地说,我是)。

所以我通过“播放”按钮运行网站,又名“开始调试”,在Visual Studio 2017中,会启动一个特殊的Chrome窗口,其中会抛出上述错误。

要解决这个问题,我可以(或者你可以,未来的网络旅行者)在没有调试的情况下开始,在IIS中托管网站等。

编辑:如果有一个更好的解决方法,我可以在调试模式下使用服务工作者,请建议它,我会将其标记为答案。但是对于我的具体问题,上面的解决方法很好:)。

答案 1 :(得分:4)

遇到同样的问题,并找到了其他一些方法。

VS在调试时识别“chrome.exe”并添加一些参数,这就是服务工作者不能工作的原因。

有一个选项Debug =>选项=>调试=>一般=>为asp.net启用javascript调试(chrome和ie)。如果您不想在vs中使用js调试 - 比如我,因为我使用chrome进行js调试 - 只需停用此选项,服务工作人员就可以使用。 VS Enable JS Debugging in Chrome

或者,您可以将chrome添加为新的“浏览器”并切换浏览器以进行调试。因为vs识别“chrome.exe”通过管理命令行“mklink chromedirect.exe chrome.exe”创建一个符号链接,并将其添加为visual studio中的新浏览器。

这可以在“播放”上下文菜单=>下完成。浏览。 VS Play Context Menu

只需添加chromedirect.exe,不带任何参数和友好名称,例如“Google Chrome Direct”。之后,您可以切换到浏览器并选择是否要进行VS JS调试。