Возникла проблема, когда у некоторых из наших пользователей в наших браузерах Facebook с наших сайтов глючил сервисный работник.
Проблема: пользователи приложения Facebook получают нашу страницу «Вы в автономном режиме» набраузер FB, когда они получают доступ к нашим страницам, размещенным на FB.
Похоже, ошибка заключалась в том, что старая версия Google Workbox (3.6.1) автоматически возвращала страницу «Вы находитесь в автономном режиме» вПриложение FB, использующее Chrome 75. Обновление Workbox исправило его.
Ссылка на Workbox была в сервисном работнике, поэтому, когда мы обновляли нашу версию Workbox (которая исправила проблему), некоторые пользователи все еще сохраняли в кэше старую версию.
Если пользователи очищают свои кэши приложений FB или переустанавливают FB, то все хорошо, и они могут видеть наш контент.Но мы хотели бы попытаться принудительно обновить ПО, не прося их сделать это.
Чтобы стереть старый Service Service Worker из браузера FB, мы попытались сделать следующее:
<script>
"use strict";
console.log("Service Worker Registration");
function isFacebookApp() {
var ua = navigator.userAgent || navigator.vendor || window.opera;
return (ua.indexOf("FBAN") > -1) || (ua.indexOf("FBAV") > -1);
}
if ("serviceWorker" in navigator) {
if(isFacebookApp() == true) {
console.log("Service Worker Registration: using v2, via Facebook App");
navigator.serviceWorker.getRegistrations().then(function(registrations) {
for(let registration of registrations) {
console.log("Service Worker Registration: "+registration);
registration.unregister();
}
});
} else {
console.log("Service Worker Registration: using v2, not via Facebook App");
window.addEventListener("load", () => {
navigator.serviceWorker.register("/sw.js");
});
}
}
</script>
Однако наша аналитика показывает, что мы все еще получаем хиты на странице «Вы находитесь в автономном режиме», и мы по-прежнему получаем отчеты от пользователей о том, что они могут переходить по ссылкам на наши статьи.
Кто-нибудь может помочь?Есть ли способ заставить браузер FB в приложении обновить кэш и заставить наших пользователей использовать работающий сервисный работник?
Обновление
Пока мы пытались:
- Дурак браузера, чтобы обновить работника службы, используя строку запроса в URL регистрации SW
- Итерация по регистрации и отмена регистрации () (см. Выше)
- Использование
skipWaiting()
в коде Service Worker - Добавление 'no-cache' к нашим заголовкам на sw.js
- Обеспечение того, чтобы sw.js не кэшировался сервером
- Удаление или изменение страницы
/offline
привело к net::ERR_FAILED
ошибке - Мы подозревали, что во всех наших ревизиях сервисного работника может быть какая-то невидимая ошибка, поэтому мы попробовали «пустой» сервисработник, чтобы увидеть, сработает ли это, и избавиться от других
Наша аналитика показывает следующее:
- Chrome Mobile 75 может быть проблемой
- проблемпохоже, что это произошло с 6 по 7 июня.
Ничего не помогло: наш сервисный работник, или что-то , все еще возвращает страницу в автономном режиме ...