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

部分域名下IDBDatabase transaction报对象存储不存在问题咨询

修复方案

这个报错的核心逻辑是:调用IDBDatabase.transaction()时传入的object store名称,在当前已建立连接的数据库实例中不存在。仅单域名触发的场景基本都是同域存储状态与代码预期不匹配导致,按优先级排查即可:

  • 首先清理同域残留的脏IndexedDB数据
    90%的单域名独发问题都是这个原因:当前域名之前部署过旧版本游戏、其他测试项目,和当前游戏使用了完全相同的IndexedDB数据库名,但object store结构不一致。浏览器会持久化同域下的IndexedDB数据,只要你代码里声明的数据库版本号和浏览器里存的旧库版本号一致,onupgradeneeded事件根本不会触发,连接拿到的是旧结构的数据库,自然找不到目标store。其他域名无问题本质是那些域名下没有残留同名旧库。
    操作步骤:打开出问题的域名,F12打开开发者工具切到Application面板,找到Storage分类,勾选IndexedDB后点击清除站点数据,硬刷新页面重试。
    代码层面的永久规避方案:不要只依赖onupgradeneeded建表,数据库连接成功后先校验是否存在目标object store,如果缺失就主动调用db.close(),用更高的版本号重新发起open请求,强制触发升级流程重建表结构。

  • 检查Construct 3的存储配置冲突
    Construct 3默认的存档存储使用固定的数据库名,如果你在同域名下部署过多个C3游戏,且没有开启自定义存储前缀,多个游戏会共用同一个IndexedDB库,结构互相覆盖直接触发这个错误。检查项目属性里的存储设置,给当前游戏配置独立的存储前缀即可避免撞库。另外不要在引擎初始化完成前调用自定义IndexedDB逻辑,C3引擎启动时会自行初始化内置存储表,提前调用事务会赶在表创建完成前执行,直接抛错。

  • 排查浏览器存储权限拦截
    如果清完数据还是报错,检查当前域名的存储权限:如果域名被浏览器标记为跟踪源、或者你手动设置了站点数据阻止权限,Safari、Firefox的严格隐私模式会返回临时的空IndexedDB实例,onupgradeneeded里的建表逻辑会静默失败,所有store都不会被创建。在地址栏左侧的站点权限设置里,把当前域名的站点数据权限设为允许即可。

避坑提示:所有IndexedDB事务操作必须放在数据库open请求的success回调、且onupgradeneeded流程执行完成后再触发,不要在连接建立前提前调用事务,否则即使表结构正确也会偶发找不到store的错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 04:45:38