Я боролся с этим несколько месяцев и не могу понять. Я использую сервисного работника какое-то время без проблем, но в последнее время я загружаю домашнюю страницу своего сайта, а затем делаю простое обновление, и мне будет подана страница офлайн (и если я удалю офлайн-страницу из кэша, она обновится до экран ошибки соединения). Это происходит только на домашней странице и должно иметь какое-то отношение к 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)", которые извлекают домашнюю страницу, всегда терпят неудачу.
Вот моя вкладка в сети, чтобы показать, что другие задания на выборку работают нормально:
Для справки, мой 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, поскольку он работает в Канарских островах... но я бы предпочел выяснить, что может произойти в случае, если этого не произойдет.
После того, как вы пробовали профиль гостя в Chrome 68, оба извлечения выполнялись. После устранения неполадок с расширениями выясняется, что это вызвано uBlock Origin-, несмотря на то, что домен включен в белый список. Когда это расширение полностью отключено, оба извлечения снова работают.