У меня есть PWA, который работает в автономном режиме с фоновой синхронизацией и работает во всех браузерах (проверено Brave / Safari / Chrome / Firefox). Я могу добавить статьи, и после добавления статьи она сохраняется в indexedDB. Если в автономном режиме приложение не может связаться с сервером для публикации данных, запрос отправляется в фоновую синхронизацию рабочего ящика, как и ожидалось, и статья попадает в мою базу данных MySQL, как только сеть снова становится активной.
Однако в iOS Safari PWA работает в режиме онлайн, но когда я захожу в автономный режим и пытаюсь опубликовать статью, данные успешно попадают в indexedDB, но фоновая синхронизация не добавляется в очередь, и я получаю сообщение ошибка
FetchEvent.respondWith получено сообщение об ошибке: UnknownError: Ошибка подготовки данных BLOB / файла для хранения в хранилище объектов
Я предполагаю, что это потому, что тело запроса является BLOB-объектом. Как бы я мог сохранить запрос и синхронизировать iOS при следующем подключении к сети?
Большое спасибо за предоставленную помощь.
Вот мои фрагменты кода добавления статьи (main.js) и мой код работника службы (sw.js)
function addAndPostArticle(e)
{
e.preventDefault();
const data = {
id: Date.now(),
title: document.getElementById('article-title').value,
content: document.getElementById('article-content').value
};
updateUI([data]);
saveArticleDataLocally([data]);
const headers = new Headers({'Content-Type': 'application/json'});
const body = JSON.stringify(data);
return fetch('/pwa/api/add.php', {
method: 'POST',
headers: headers,
body: body
});
}
sw.js
const bgSyncPlugin = new workbox.backgroundSync.Plugin('myQueueName', {
maxRetentionTime: 24 * 60 // Retry for max of 24 Hours
});
workbox.routing.registerRoute(
'/pwa/api/add.php',
workbox.strategies.networkOnly({
plugins: [bgSyncPlugin]
}),
'POST'
);