微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

服务工作者同步事件不适用于 nextjs

如何解决服务工作者同步事件不适用于 nextjs

我有一个 next.js 应用程序并尝试使用 service-worker 实现进行离线消息发送。我使用过类似 next-pwa 或 next-offline 的库,但决定创建我的自定义工作程序,因为 next 9+ 允许我们通过公共文件夹提供静态文件

所以我在公共文件夹中创建了一个文件public/local-sw.js 在聊天页面,我已经用这些代码注册了它:

    const serviceWorker = useRef(null);
    
      const registerServiceWorker = async () => {
        if ('serviceWorker' in navigator) {
          serviceWorker.current = await navigator.serviceWorker.register('/local-sw.js',{
            type: 'module',});
        }
      };
    
      useEffect(() => {
        registerServiceWorker();
      },[]);

  const syncWorker = () => {
    return serviceWorker.current?.sync.register('outBox');
  };

Worker 已成功注册到应用程序。但我需要在用户发送消息时注册同步事件。这是我的代码的样子:

const sendMessage = async (text) => {
    openDB('messages',1,{
      upgrade: function (upgradeDb) {
        upgradeDb.createObjectStore('outBox',{ autoIncrement: true,keyPath: 'id' });
      },})
      .then(function (db) {
        var transaction = db.transaction('outBox','readwrite');
        return transaction.objectStore('outBox').put(message);
      })
      .then(function () {
        console.log('sync section');
        return syncWorker();
      })
      .catch(function (err) {
        console.error(err);
      });
  };

当 sendMessage 函数工作时,消息成功保存到 indexeddb,但同步事件不会触发到 service-worker。我在工作文件中记录了一些数据,但没有任何反应。这是服务工作者文件

self.addEventListener('sync',function (event) {
  console.log('sync from local-sw worker',event);
});

我真的需要一些帮助,next.js 没有任何不同的示例或资源。谢谢...

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。