【发布时间】:2019-07-05 12:45:46
【问题描述】:
我有一个基本的服务工作者,它在没有互联网连接时返回一个离线页面。网站返回 302 重定向的任何地方,无论是在线还是离线,该网站都会因服务人员的原因而中断。
服务人员:
'use strict';
var cache_key = 'offline_cache_v18';
this.addEventListener('install', event => {
event.waitUntil(
caches.open(cache_key).then(function(cache) {
return cache.addAll([
'/offline.html'
]);
})
);
});
this.addEventListener('fetch', event => {
if (event.request.mode === 'navigate' || (event.request.method === 'GET' && event.request.headers.get('accept').includes('text/html')) ) {
event.respondWith(
fetch(event.request.url).catch(error => {
return caches.match('/offline.html');
})
);
} else {
event.respondWith(caches.match(event.request).then(function (response) {
return response || fetch(event.request);
}));
}
});
破坏服务工作者的页面:
<?php header('Location: /'); ?>
预期结果:页面照常加载,离线时除外,此时应显示offline.html。
实际结果:网站无法完全加载到响应 302 重定向的页面上,理由是“无法访问此网站”。控制台还报告:'FetchEvent 导致网络错误响应:重定向响应用于重定向模式不是“跟随”的请求。'
尝试:使用 response.status 检查响应代码,并尝试切换代码以使用“工作箱”库。还尝试了 {redirect: 'follow'} 参数,但对于如此简单的事情,它现在似乎变得相当先进。所有的“离线页面”教程似乎都有同样的错误。
【问题讨论】:
标签: service-worker progressive-web-apps