You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Firestore set调用在Safari中无法正常工作的问题求助

问题:Firestore写入功能在Safari浏览器失效,Chrome正常
  • 功能表现:Chrome浏览器中可正常向Firestore添加新文档,但Safari中完全无法生效
  • 已尝试操作:添加firebase.firestore().settings({ experimentalForceLongPolling: true });代码、清除浏览器缓存
  • 当前状态:Firestore读写规则已设为允许,可正常读取数据,但Safari中写入/添加新文档失败,错误提示为Failed to get document because the client is offline

可能的解决方案

1. 调整Firestore设置的调用时机

把Firestore配置代码移到Firebase初始化之后,而非点击事件内部。重复调用settings()可能引发兼容性冲突,正确写法如下:

if (!firebase.apps.length) {
  firebase.initializeApp(firebaseConfig);
  // 初始化App后立即配置Firestore
  firebase.firestore().settings({ experimentalForceLongPolling: true }); 
}

2. 等待写入操作完成再跳转页面

当前代码中,调用set(dataAdded)后立刻执行页面跳转,Safari中可能因请求未完成就被中断而失败。需等待写入操作完成后再跳转:

// 替换原代码中的写入与跳转逻辑
db.collection("users").doc().set(dataAdded)
  .then(() => {
    // 写入成功后再跳转
    window.location = 'http://www.womanverse.ro/membership';
  })
  .catch((err) => {
    console.error("写入用户数据失败:", err);
    $('p#firebase-register-error').show();
    $('p#firebase-register-error').text("注册失败,请稍后重试");
  });

3. 检查Safari隐私设置

Safari的严格隐私规则可能阻止Firestore正常工作:

  • 打开Safari偏好设置 → 隐私 → 取消勾选「阻止所有Cookie」
  • 确认目标域名未被禁止存储网站数据

4. 更新Firebase SDK版本

旧版SDK可能存在Safari兼容性问题,尝试升级到最新稳定版。

相关代码

const firebaseConfig = {
  apiKey: "AIzaSyA34jId_vxluwcj1F9Zl-JeEeZiP0ip_eY",
  authDomain: "{PROJECT-NAME}.firebaseapp.com/",
  databaseURL: "https://{PROJECT-NAME}.firebaseio.com/",
  projectId: "{PROJECT-NAME}",
  storageBucket: "https://{PROJECT-NAME}.appspot.com/",
  messagingSenderId: "316955821458",
  appId: "1:316955821458:web:5916a8b13256ada9cc2d4b",
  measurementId: "G-JYCTHTXTVE"
};

// 初始化Firebase(避免重复初始化)
if (!firebase.apps.length) {
  firebase.initializeApp(firebaseConfig);
}

// Firebase注册按钮点击事件
$('#firebase-register-form-submit').click(function (event) {
  event.preventDefault();
  let data = $('#firebase-register-form :input').serializeArray();

  firebase.firestore().settings({ experimentalForceLongPolling: true }); 
  let db = firebase.firestore();

  let email = data[0].value;
  let password = data[1].value;
  let name = data[2].value;
  let phoneNumber = data[3].value;
  let checkBox = data[4] ? true : false;

  // 校验所有字段不为空
  if (email !== '' && password !== '' && name !== '' && phoneNumber !== '') {
    firebase
      .auth()
      .createUserWithEmailAndPassword(email, password)
      .then(() => {
        let dataAdded = {
          email: email,
          isSubscribed: checkBox,
          name: name,
          phoneNumber: phoneNumber
        };
        db.collection("users").doc().set(dataAdded);
        window.location = 'http://www.womanverse.ro/membership';
      })
      .catch((error) => {
        console.log(error.message);
        $('p#firebase-register-error').show();
        $('p#firebase-register-error').text(error.message);
      });
  } else {
    $('p#firebase-register-error').text('请填写所有字段!');
  }
});

内容的提问来源于stack exchange,提问作者Roland Iordache

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 23:45:41