所以我会保持这种简洁:在尝试安装时,我的服务工作者会失败。这是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);
})
);
});
我收到异常,因为cache
是undefined
(位于cache.addAll
位)。
不确定为何会出现这种情况?
之前我曾使用过服务工作者,从未遇到过这个问题。这是我第一次使用带有ASP.Net后端的服务工作者,所以不确定这是不是问题?
答案 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调试。