我有一个使用iOS 11.2时构建的渐进式Web应用程序。我可以确认该应用程序在11.3之前按预期工作100%。 11.3中的某些内容破坏了我的代码。当我在更新index.php后启动应用程序时,它加载了最新版本,现在它没有......
它曾经在此更新之前自动更新,现在它继续使用相同的文件(在缓存中?)。但我在htaccess中设置了index.php的无缓存策略。所以在11.2当我打开应用程序时,它获取了最新的index.php,但现在它只保留旧版本,即使我在safari中打开页面。更新的唯一方法是在Safari设置中清除网站数据。清单和服务工作者在iOS< 11.3,android和PC上正确下载和更新我的应用程序,但不在iOS> = 11.3上。
推动新服务工作人员重新加载内容并不会......
.htaccess缓存策略
<Files index.php>
Header set Cache-Control "max-age=0, no-cache, no-store, must-revalidate"
</Files>
我的清单包含在我的元标记上方
<link rel="manifest" href="manifest.json">
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-status-bar-style" content="black">
<meta name="apple-mobile-web-app-title" content="My App">
<link rel="apple-touch-icon" href="media/images/app_icon_256.png">
我的清单
{
"name": "My App",
"short_name": "My App",
"icons": [
{
"src": "media/images/app_icon_192.png",
"sizes": "192x192",
"type": "image/png"
},
{
"src": "media/images/app_icon_256.png",
"sizes": "256x256",
"type": "image/png"
},
{
"src": "media/images/app_icon_384.png",
"sizes": "384x384",
"type": "image/png"
},
{
"src": "media/images/app_icon_512.png",
"sizes": "512x512",
"type": "image/png"
}
],
"start_url": "index.php",
"display": "standalone",
"background_color": "#2e4668",
"theme_color": "#d0a331"
}
我注意到PWA现在从清单而不是元标记中获取它的标题?
我的服务人员看起来像这样......
var CACHE_NAME = 'toh-app-cache-1-0056';
var expectedCaches = [CACHE_NAME];
var urlsToCache = [
"css/bootstrap.min.css",
"css/fontawesome.min.css",
"js/jquery-3.3.1.min.js",
"js/popper.min.js",
"js/bootstrap.min.js",
"media/images/home.jpg",
"media/images/toh_logo.png",
"media/images/download/add-to-homescreen-android.jpg",
"media/images/download/add-to-homescreen-apple.jpg",
];
self.addEventListener('activate', event => {
event.waitUntil(
caches.keys().then(keys => Promise.all(
keys.map(key => {
if (!expectedCaches.includes(key)) {
return caches.delete(key);
}
})
)).then(() => {
console.log('New cahce now ready to handle fetches!');
})
);
});
self.addEventListener('install', function(event) {
event.waitUntil(
caches.open(CACHE_NAME)
.then(function(cache) {
console.log('Opened cache');
return cache.addAll(urlsToCache);
})
);
});
self.addEventListener('fetch', function(event) {
event.respondWith(
caches.match(event.request)
.then(function(response) {
if (response) {
return response;
}
var fetchRequest = event.request.clone();
return fetch(fetchRequest).then(
function(response) {
if (!response || response.status !== 200 || response.type !== 'basic') {
return response;
}
var responseToCache = response.clone();
caches.open(CACHE_NAME)
.then(function(cache) {
cache.put(event.request, responseToCache);
});
return response;
}
);
})
);
});
答案 0 :(得分:0)
我遇到了同样的问题,我能想出的唯一解决方案是将应用程序移动到一个全新的URL,然后它提供新文件,因为缓存是针对旧URL的。显然,这不是一个理想的解决方案,如果您的应用已经投入生产,您将不想更改其网址,但无论如何,它对我有用