Получить API внутри Service Worker не удается только для домашней страницы. При перезагрузке он обслуживает кэшированную офлайн-страницу

1

Я боролся с этим несколько месяцев и не могу понять. Я использую сервисного работника какое-то время без проблем, но в последнее время я загружаю домашнюю страницу своего сайта, а затем делаю простое обновление, и мне будет подана страница офлайн (и если я удалю офлайн-страницу из кэша, она обновится до экран ошибки соединения). Это происходит только на домашней странице и должно иметь какое-то отношение к API-интерфейсу Fetch (см. Ниже). Ошибка выборки просто "Не удалось получить" и не содержит дополнительной информации об ошибке.

Мой манифест установлен с надлежащим объемом / а файл sw.js находится в корневом каталоге. Как я уже упоминал, это работает нормально, не внося никаких изменений в Chrome 66 (и раньше), но после этого у него возникли проблемы после обновления до стабильной версии 67, а также 68. Во всех других браузерах, поддерживающих сервисного сотрудника (включая Chrome Canary), не проблема.

Существует так много кода, что я не знаю, как лаконично сварить его до такой записи, но вот мой тестовый пример (который я запускал как в режиме инкогнито, так и в обычном режиме). Этот код находится в файле рабочих рабочих sw.js, который находится в подкаталоге /nebula/ (который является корневым уровнем для этого веб-сайта). Я сохраняю свои заметки в Github, поэтому более подробное объяснение и дополнительные скриншоты доступны здесь: https://github.com/chrisblakley/Nebula/issues/1709 (особенно этот пост здесь)

console.log('(A) about to fetch via sw');
fetch('https://gearside.com/nebula/get-started/checklists/').then(function(response) {
    console.log('(A) we got it!', response);
}).then(function(returnedValue) {
    console.log('(A) returning the value!', returnedValue);
}).catch(function(err) {
    console.log('(A) fetch error:', err);
});

console.log('(B) about to fetch via sw');
fetch('https://gearside.com/nebula/').then(function(response) {
    console.log('(B) we got it!', response);
}).then(function(returnedValue) {
    console.log('(B) returning the value!', returnedValue);
}).catch(function(err) {
    console.log('(B) fetch error:', err);
});

Журналы консоли "(A)" извлекают подстраницу и всегда успешны, но журналы "(B)", которые извлекают домашнюю страницу, всегда терпят неудачу.

Изображение 174551

Вот моя вкладка в сети, чтобы показать, что другие задания на выборку работают нормально:

Изображение 174551

Для справки, мой manifest.json (я сократил несколько значков, чтобы быть кратким):

{
    "name": "Nebula: Advanced Starter WordPress Theme for Developers",
    "short_name": "Nebula",
    "description": "Advanced Starter WordPress Theme for Developers",
    "theme_color": "#0098d7",
    "background_color": "#f6f6f6",
    "gcm_sender_id": "",
    "scope": "/",
    "start_url": "https://gearside.com/nebula/?utm_source=homescreen",
    "display": "standalone",
    "orientation": "portrait",
    "icons": [{
        "src": "https://gearside.com/nebula/wp-content/themes/Nebula-master/assets/img/meta/android-chrome-512x512.png",
        "sizes": "512x512",
        "type": "image/png"
    }]
}

Когда SW установлен, он кэширует несколько файлов (есть какая-то автоматизация, но у них никогда не было проблем):

var CACHE_NAME = 'nebula-nebula-child-27905'; //Wednesday, August 8, 2018 11:59:21 PM
var OFFLINE_URL = 'https://gearside.com/nebula/offline/';
var OFFLINE_IMG = 'https://gearside.com/nebula/wp-content/themes/Nebula-master/assets/img/offline.svg';
var META_ICON = 'https://gearside.com/nebula/wp-content/themes/Nebula-master/assets/img/meta/android-chrome-512x512.png';
var MANIFEST = 'https://gearside.com/nebula/wp-content/themes/Nebula-master/inc/manifest.json';
var HOME_URL = 'https://gearside.com/nebula/';
var START_URL = 'https://gearside.com/nebula/?utm_source=homescreen';

А в файле JavaScript моего сайта он отправляет дополнительные страницы в кеш при необходимости.

Кто-нибудь еще сталкивался с этим раньше со своим работником службы или с API-интерфейсом Fetch? Я рад поделиться дополнительной информацией, если это необходимо. Мой маленький проблеск надежды заключается в том, что это волшебным образом исправит себя с Chrome 69 или 70, поскольку он работает в Канарских островах... но я бы предпочел выяснить, что может произойти в случае, если этого не произойдет.

Теги:
service-worker
fetch-api

1 ответ

0

После того, как вы пробовали профиль гостя в Chrome 68, оба извлечения выполнялись. После устранения неполадок с расширениями выясняется, что это вызвано uBlock Origin-, несмотря на то, что домен включен в белый список. Когда это расширение полностью отключено, оба извлечения снова работают.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню