我正在构建一个离线优先的Web应用程序。我正在使用redux-offline lib将我的状态存储在IndexedDB中。该应用程序在桌面上工作得非常好 - 我可以从网络上断开连接,刷新应用程序,所有数据都将从IndexedDB中恢复。但是,当我尝试在Android(或iPhone)上执行相同的操作时。当我进入飞行模式并尝试刷新应用程序的那一刻,我收到了“您处于离线状态”。 dinasaur错误(在Chrome中)。如何禁用离线优先应用程序中的连接检查(Chrome - Android和Safari iOS)
下面是我在我的清单文件,现在是相关的:
{
"short_name": "...",
"name": "...",
"manifest_version": 2,
"offline_enabled": true,
"start_url": "/events",
"theme_color": "#000000",
"background_color": "...",
"display": "standalone",
"default_locale": "en",
"description": "...",
"permissions": [
"unlimitedStorage"
],
"icons": [{...}]
}
这里是我的sw.js:
var CACHE_NAME = 'my-cache-v1';
var urlsToCache = [
'/',
'/index.html',
'/dist/bundle.css',
'/dist/bundle.js',
'/assets/font-awesome/fonts/fontawesome-webfont.woff2',
'/assets/fonts/...',
'/assets/images/...',
'/assets/images/favicon.ico',
'/assets/tinymce/tinymce.min.js',
'/assets/activity_notification.mp3',
];
self.addEventListener('install', function(event) {
// Perform install steps
event.waitUntil(
caches.open(CACHE_NAME)
.then(function(cache) {
console.log('ServiceWorker: Opened cache');
return cache.addAll(urlsToCache);
})
);
});
这里是我对它的进口index.html中:
if ('serviceWorker' in navigator) {
navigator.serviceWorker.register('/sw.js')
.then(function(registration) { console.log('ServiceWorker registration successful with scope: ', registration.scope); })
.catch(function(err) { console.log('ServiceWorker registration failed: ', err); });
}
我所有的静态资源(包括我的JavaScript包)都使用服务工作人员进行缓存。它确实有效,因为我看到了包中的控制台输出。
我看到所有的数据都在IndexedDB中。当我看到脱机恐龙时,它不会显示在开发者控制台中。如果我离线,Android似乎阻止我做任何事情。
GET ...url... net::ERR_INTERNET_DISCONNECTED ...url...
Navigated to data:text/html,chromewebdata
有没有办法禁用该检查?什么是正确的方式去呢?
*“我的所有静态资源(包括我的JavaScript包)都是使用服务工作人员缓存的。“*这包括你的HTML文件吗?你的服务工作人员是否处理导航请求?如果你在Android上看到离线的dino,那么这意味着你没有一个软件开发工具可以与先前缓存的HTML一起响应导航请求。你的服务工作者设置? –
@JeffPosnick你是对的,我忘记了SW中的index.html,将尝试与此并回馈给你,谢谢! –
@JeffPosnick添加index.html(我的项目中唯一的静态html文件)到SW没有解决问题。用SW配置更新了这个问题。 –