我是Polymer 2.0的新手,也是服务工作者的新手。但是,如果我通过Polymer构建,则会写一个service-worker.js。到目前为止,一切正常。
我想将自己的事件添加到服务工作者。就像用于与pouchdb同步的'sync'事件一样。
我将importScripts: ['sw.js']
添加到sw-precache-config.js
文件中。这会在importScripts("sw.js");
文件中生成代码行service-worker.js
。
我的想法是将我的'同步'事件添加到sw.js
但事件在重新上线后却没有。我做错了吗?我错过了什么?还有更好的方法吗?
修改
在按钮上单击以下函数:
function onMessageSend(message){
navigator.serviceWorker.ready.then(function(registration) {
registration.sync.register('outbox').then(function() {
console.info('success');},function() {
console.info('no success');});});
}
sw.js
中的同步事件如下所示:
self.addEventListener('sync', function(event) {
console.log("a sync catched");
if (event.tag === "outbox") {
console.log("is my sync");
event.waitUntil(fetch("http://website.com/otherthings",{ mode: 'no-cors'})
.then(function(response) {
console.log("ok, sent");})
.catch(console.error));
}});
调用onMessageSend()
后,我看到waitUntil
尝试获取网站,但如果离线则失败。这是通缉。
但是,当失败后,当离线状态变为在线状态时,同步事件是否也应该被触发?这根本不会发生。
EDIT2:我的电脑通过局域网连接。同步事件立即触发,与连接状态无关。 有些不对劲。
EDIT3:从waitUntil中删除catch并没有帮助。