我已经在我的网站上添加了PWA功能和服务人员。在发布到live server之后,许多用户开始遇到问题,例如:“无法访问此站点”,但当用户单击CTRL F5时,它就可以正常工作。
为了立即解决问题,我已将PWA和服务人员从我的释放中移除。然而,许多用户都面临着同样的问题,或者服务人员出现了“未找到索引页”错误。
如何从最终用户的浏览器中删除或注销旧的服务工作人员?
我尝试使用以下代码删除service worker缓存:
if ('caches' in window) {
caches.keys()
.then(function(keyList) {
return Promise.all(keyList.map(function(key) {
return caches.delete(key);
}));
})
}
要删除服务人员,我添加了以下内容:
if(window.navigator && navigator.serviceWorker) {
navigator.serviceWorker.getRegistrations()
.then(function(registrations) {
for(let registration of registrations) {
registration.unregister();
}
});
}
浏览器将在服务辅助进程的生存期后禁用该服务辅助进程。
我曾经面对过这个问题,真的很痛苦。
黑客:在你的应用程序中。组成部分ts在ngAfterViewInit()内使用以下行;
ngAfterViewInit() {
window.location.reload();
}
这是一个肮脏的黑客,不是一个糟糕的做法,让这段代码持续几天,直到你知道你的用户拥有你的角应用的最新版本。
之后,如果您希望对PWA使用Service-Worker,请使用以下代码自动更新您的客户端。
在构造函数中注入private swUpdate:swUpdate,private snackbar:matsnakbar
,并在其中编写以下代码。
this.swUpdate.available.subscribe(evt => {
let snack = this.snackbar.open('Update Available', 'Reload Please.');
snack.onAction().subscribe(() => {
window.location.reload();
});
setTimeout(() => {
snack.dismiss();
}, 10000);
});
如果你仍然面临任何问题,让我知道这可能是一个有趣的问题来解决。
您使用的代码正确,可以注销service worker并从客户端删除其缓存。
您的软件是否正在处理任何长期任务?因为如果是这样,它将在被删除之前等待完成该任务。
在最坏的情况下,您的服务人员将在24小时内检查是否有更新的版本可用。此功能称为故障保护,将由浏览器触发。
您的代码已经很好了,但是如果您想了解更多关于服务工作者和缓存策略的信息,我写了一篇关于它们的文章。
问题内容: 范围:两个表。创建新的顾客时,他们会将有关他们的一些信息存储到第二张表中(这也使用触发器完成,它可以按预期工作)。这是我的表结构和关系的示例。 表1-> 顾客 表2-> patron_info 管理员可以管理顾客。当他们选择移走顾客时,将顾客从 桌子1 移开。此时, 表2 没有任何反应。 我只是想创建一个触发器,以便在表1的项目已删除时从表2中删除。这是我尝试过的… 最初,我尝试删除触
用于从不存在的VM中删除磁盘的所有在线说明都与旧的Azure UI有关,该UI不包含与新门户相同的菜单命令。因此,我需要使用新的Azure管理门户删除孤立磁盘的说明。旧门户的说明对此操作毫无价值。
问题内容: 有谁知道我该如何从Android浏览器中删除地址栏,以更好地查看我的Web应用程序并使它看起来更像本机应用程序? 问题答案: 您可以使用下一个代码 希望对您有帮助!
使用.NET rabbitmq客户端(https://www.rabbitmq.com/dotnet.html)。创建了一个库,其他项目可以引用该库在总线上订阅/取消订阅/发布消息。 根据这里和这里提供的信息,为了让每个订户接收所有消息,每个客户端需要为每个订户定义一个不同的队列,绑定到交换机。我遇到的问题是如何在“客户端”应用程序使用队列完成后删除队列(因为这将以指数级增长,而且永远不会被清理掉
问题内容: 我正在使用WebDriver运行Selenium测试。我将以某种循环重复测试,因此现在我想在JAVA中开始新测试之前清除缓存。 在这个while循环中,我要做的第一件事是清除CACHE(即MOZILLA和CHROME) 知道我该如何实现吗? 谢谢 问题答案: 当前,无法通过Web驱动程序API清除缓存。但是,如果每次都可以启动浏览器的新实例,则应在FF和Chrome中清除缓存,因为每次
问题内容: 我正在使用scrapy抓取一个似乎在每个URL末尾向查询字符串添加随机值的网站。这将爬网变成一种无限循环。 我如何抓紧忽略URL的查询字符串部分? 问题答案: 示例代码: 输出示例: