vnd*_*pal 6 service-worker progressive-web-apps angular
我已将 PWA 添加到角度应用程序中。
下面是 service worker 内部的代码,它监听同步事件。一旦 Service Worker 检测到 Internet 连接,它就会触发此同步事件。
self.addEventListener('sync', function (event) {
console.log('syncing started.');
event.waitUntil(getAllrecordsAndPost());
});
Run Code Online (Sandbox Code Playgroud)
在组件中:
同步事件注册:
navigator.serviceWorker.ready.then(function(swRegistration) {
return swRegistration.sync.register('myFirstSync');
});
Run Code Online (Sandbox Code Playgroud)
这在桌面的 chrome 中工作正常,但在 android chrome 上,后台同步事件不起作用。
仅供参考:我使用的是最新的 chrome 版本 (79)。
编辑:
经过进一步调查,我发现同步事件正在被触发,但在该同步事件中写入了一个获取代码,这给出了错误,这就是后台同步不起作用的原因。下面是侦听同步事件并命中 API 的代码。
(function () {
'use strict';
self.addEventListener('sync', function (event) {
event.waitUntil(postUrl());
});
function postUrl() {
let url = 'http://mytesturl.com/testAPI';
let data = {name:'test',age:10};
fetch(url, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: data
}).then((result)=>{
console.log('successful');
}).catch((x)=>{
console.log('error ' + x);
})
}
}());
Run Code Online (Sandbox Code Playgroud)
在控制台中,我收到错误: error TypeError: Failed to fetch
一旦检测到互联网连接,服务工作线程的后台同步就会被触发。
因此,同步事件内的任何内容也将立即执行(发布请求)。无论互联网连接的稳定性如何,为了避免这种情况,我添加了 3 秒的超时。现在它按预期工作。
在 Service Worker 内同步事件监听器:
self.addEventListener('sync', function (event) {
event.waitUntil(setTimeout(function(){getAllrecordsAndPost()},3000));
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1544 次 |
| 最近记录: |