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

Gatsby-plugin-offline - Service Worker 拦截表单 POST 请求

如何解决Gatsby-plugin-offline - Service Worker 拦截表单 POST 请求

我有一个带有 gatsby-plugin-offline 的页面设置。

我终于让一切都脱机工作了(文档有点少,所以这有点“反复试验”)。但我现在有一个我似乎无法解决的问题。

我向 Netlify 发出的联系表单 POST 请求被 serviceworker 拦截。我在这里真的不需要任何离线功能 - 当用户离线时,我简单地将表单中的“发送”按钮“交换”为“网络离线”消息。但是,当页面在线时,serviceworker 仍然会启动。

我想我必须为 POST 请求做某种替代路由,但我不知道如何解决这个问题?

到目前为止,这是我在 gatsby-plugin-offline 中按预期工作的设置:

{
      resolve: "gatsby-plugin-offline",options: {
        precachePages: [
          `/index.html`,`/en/artikler/*`,`/en/artikler/*/*`,`/en/`,`/artikler/*`,`/artikler/*/*`,`/webudvikling/*`,`/en/webudvikling/*`,`/grafik/*`,`/en/grafik/*`,`/kompetencer/*`,`/en/kompetencer/*`,],workBoxConfig: {
          globPatterns: [
            "**/*{.html,.webp,.webmanifest,.woff,.woff2,.ttf,.eot,.css,.svg,.mp3,icons/icon*,.ico,sw.js}",},

插件的文档暗示可以通过在选项下添加一行来将脚本附加到 serviceworker:

appendScript: require.resolve(`./src/custom-sw-code.js`),

我的想法是添加如下内容

workBox.routing.registerRoute(
      /\$?????????/,workBox.strategies.networkFirst(),)

但我不确定?您能否通过 event.request.method === 'POST' 或类似方式进行过滤以仅将任何 POST 请求强制发送到网络?

解决方法

啊对不起。这已经在该线程的其他地方回答了:

Netlify Forms and service worker

简而言之:在每个表单提交的 POST url 中附加一个唯一的 id。这样,Service Worker 将无法拦截响应,因为实际上没有什么可缓存的。

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