我有一个离线运行的PWA,后台同步正在运行,它适用于所有浏览器(Brave / Safari / Chrome / Firefox测试) . 我可以添加文章,在添加文章时,它存储在indexedDB中 . 如果离线并且应用程序无法到达服务器以发布数据,请求将按预期进入workbox-background-sync,并且一旦网络再次变为活动状态,文章将进入我的MySQL数据库 .

但是,在iOS Safari上,PWA可以在线工作,但是当我下线并尝试发布文章时,数据成功进入indexedDB,但后台同步没有添加到队列中,我看到了错误

FetchEvent.respondWith收到错误:UnknownError:准备要存储在对象库中的Blob / File数据时出错

我假设这是因为请求的主体是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'
);