移动端Safari出现Firestore Fetch API访问控制检查错误求助
移动端Safari中Firestore跨域访问错误的解决思路
问题详情
在移动端Safari中触发如下错误:
Fetch API cannot load https://firestore.googleapis.com/google.firestore.v1.Firestore/Write/channel?gsessionid=&database=&RID=&AID&TYPE=xmlhttp&zx=&t=1 due to access control checks.
(已移除部分参数值)
当前应用可正常运行,且域名已添加至Firestore白名单,但该错误仍存在。已排除安全规则问题(安全规则会抛出特定错误),即使设置全开放规则:
rules_version = '2'; service cloud.firestore { match /databases/{database}/documents { match /{document=**} { // 此规则无法解决问题 allow read, write: if true; } } }
错误依旧出现。搜索结果指向CORS问题,但该场景下此结论不合理,求可行的解决思路。使用的Firebase版本为:"firebase": "^9.10.0"
排查方向
- 检查Safari隐私设置:移动端Safari的「阻止跨网站跟踪」或「防止跨站点跟踪」选项可能会拦截这类长连接请求,可临时关闭该选项验证是否解决问题。
- 调整Firestore持久化配置:Firebase 9+版本中,本地持久化可能与Safari的存储策略冲突,尝试初始化Firestore时禁用持久化:
import { initializeApp } from "firebase/app"; import { initializeFirestore } from "firebase/firestore"; const app = initializeApp(firebaseConfig); // 禁用持久化 const db = initializeFirestore(app, { persistence: false }); - 清理未释放的实时监听:错误对应的是Firestore的Write长连接通道,通常由
onSnapshot实时监听触发,检查代码中是否存在未正确调用unsubscribe的监听,导致重复发起连接请求。 - 核对白名单配置:确保Firebase控制台中添加的域名完全匹配,包含协议(http/https)和端口号(非默认端口时),例如
https://yourdomain.com而非yourdomain.com。 - 升级Firebase版本:9.10.0为较早版本,后续版本可能修复了Safari相关兼容性问题,尝试升级至最新稳定版测试。
- 清除Safari网站缓存:旧缓存可能引发CORS相关异常,清除Safari的网站数据后重试。
内容的提问来源于stack exchange,提问作者orangesoda
相关产品推荐
相关产品推荐

