向PWABuilder Cache-first服务工作程序添加“更新可用,请刷新”提示

时间:2019-06-12 14:40:01

标签: javascript service-worker progressive-web-apps user-experience pwabuilder

我首先要与服务人员一起使网站离线。我想提示用户在更新内容可用时刷新页面。我希望用户知道他们正在查看过时的竞争,因此他们可以通过刷新页面来获取最新内容。

这些实现是一个很好的例子:

  1. Service worker demo by Mozilla

  2. this article中的方法3。

我正在使用PWABuilder提供的缓存优先服务工作程序。它运作良好,但不会提示用户可用的更新。

我试图复制以上文章中的代码,但无法正常工作。

Here is the repo of the service worker I currently use.

我要添加到服务工作者脚本中的代码:

addEventListener('message', messageEvent => {
  if (messageEvent.data === 'skipWaiting') return skipWaiting();
});

我要添加到网页的脚本:

/ reload once when the new Service Worker starts activating
var refreshing;
navigator.serviceWorker.addEventListener('controllerchange',
  function() {
    if (refreshing) return;
    refreshing = true;
    window.location.reload();
  }
);
function promptUserToRefresh(reg) {
  // this is just an example
  // don't use window.confirm in real life; it's terrible
  if (window.confirm("New version available! OK to refresh?")) {
    reg.waiting.postMessage('skipWaiting');
  }
}
listenForWaitingServiceWorker(reg, promptUserToRefresh);

如果我仅将此代码分别添加到服务人员和网页,则服务人员可以正常运行。但是更新提示不起作用。

我在控制台中收到此错误:

Uncaught ReferenceError: reg is not defined
    at (index):231

1 个答案:

答案 0 :(得分:0)

好吧,您的问题不一定与Service Workers有关:)如果仔细查看错误消息(在控制台中显示),您会发现它清楚地告诉了您一个变量未定义reg。换句话说,在代码的某个地方,您试图引用名称为“ reg”的变量,但那里不存在“ reg”。

似乎您的问题中粘贴的代码不是全部,但我怀疑问题出在这里:

data$entry_2 <- ifelse(is.na(data$age_2) & !is.na(data$age_1), NA, data$age_2)
data$entry_3 <- ifelse(is.na(data$age_3) & !is.na(data$age_1) & !is.na(data$age_2), NA, data$age_3)```

Output: 

summary(data$entry_2)
Min. 1st Qu.  Median    Mean 3rd Qu.    Max.    NA's 
12.00   58.00   69.00   64.64   72.00  102.00    9076 

summary(data$age_2)
Min. 1st Qu.  Median    Mean 3rd Qu.    Max.    NA's 
12.00   58.00   69.00   64.64   72.00  102.00    9076

无论如何,错误消息会告诉您问题出现在html文件的第231行,因此请检查一下。