Фоновая синхронизация рабочего стола iOS - FetchEvent.respond с ошибкой: UnknownError: Ошибка подготовки данных BLOB / файла для сохранения в хранилище объектов - PullRequest
0 голосов
/ 01 ноября 2018

У меня есть 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'
);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...