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

BuildFire LocalStorage在Admin与Widget间生产环境无法读取问题求助

BuildFire插件生产环境localStorage读取异常问题

问题现象

本地开发环境中插件功能正常:在Content.js中通过buildfire.localStorage.setItem保存的数据,刷新页面后仍能正常读取;但上传至生产环境(app.buildfire.com)后,Widget.js中通过buildfire.localStorage.getItem读取时,返回的结果均为null。

相关代码

Content.js 数据保存代码

function saveCredentionals (){
    buildfire.localStorage.setItem("bw_organizer_id", organizer_id, (error) => {
      if (error) return console.error("something went wrong!", error);
      console.log("All is well, data saved and other plugins can now access it");
    });

    buildfire.localStorage.setItem("bw_access_token", access_token, (error) => {
      if (error) return console.error("something went wrong!", error);
      console.log("All is well, data saved and other plugins can now access it");
    });
}

Widget.js 数据读取代码

Promise.all([
    buildfire.localStorage.getItem("bw_organizer_id"),
    buildfire.localStorage.getItem("bw_access_token"),
]).then(items => {
    let has_organizer_token = false;
    let has_access_token = false;

    if (items[0]) {
      has_organizer_token = true;
    }

    if (items[1]) {
      has_access_token = true;
    }

    if (has_access_token && has_access_token) { // 注:此处存在笔误,应为has_access_token && has_organizer_token
      displayVideoPage(items[0], items[1]);
    } else {
      setMainContent(<div>Organizer ID and access token required.</div>);
    }
});

可能原因及解决方案

1. BuildFire localStorage作用域隔离

BuildFire的localStorage默认区分Content和Widget的存储作用域,本地开发环境未严格限制,但生产环境会强制隔离。若未指定共享配置,Widget无法读取Content保存的数据。

解决办法:保存数据时添加isPublic: true参数,开启跨区域数据共享:

// 修改Content.js中的保存逻辑
buildfire.localStorage.setItem("bw_organizer_id", organizer_id, { isPublic: true }, (error) => {
  if (error) return console.error("something went wrong!", error);
  console.log("数据已公开保存,Widget可访问");
});

buildfire.localStorage.setItem("bw_access_token", access_token, { isPublic: true }, (error) => {
  if (error) return console.error("something went wrong!", error);
  console.log("数据已公开保存,Widget可访问");
});

2. 异步保存未完成就触发读取

本地环境代码执行速度快,保存操作易完成;但生产环境存在网络延迟,Widget可能在数据未完成保存时就执行读取逻辑。

解决办法:将保存操作包装为Promise,等待全部保存完成后再进行后续操作:

function saveCredentionals (){
  const saveOrganizerId = new Promise((resolve, reject) => {
    buildfire.localStorage.setItem("bw_organizer_id", organizer_id, { isPublic: true }, (error) => {
      error ? reject(error) : resolve();
    });
  });

  const saveAccessToken = new Promise((resolve, reject) => {
    buildfire.localStorage.setItem("bw_access_token", access_token, { isPublic: true }, (error) => {
      error ? reject(error) : resolve();
    });
  });

  Promise.all([saveOrganizerId, saveAccessToken])
    .then(() => {
      console.log("所有数据保存完成");
      // 此处可添加跳转或用户通知逻辑
    })
    .catch(error => console.error("保存失败", error));
}

3. Widget代码逻辑笔误

Widget中判断条件has_access_token && has_access_token存在错误,第二个条件应为has_organizer_token。即使数据读取成功,也会因该错误进入提示分支,易被误认为读取失败。

解决办法:修正判断逻辑:

if (has_access_token && has_organizer_token) {
  displayVideoPage(items[0], items[1]);
} else {
  setMainContent(<div>Organizer ID and access token required.</div>);
}

4. 生产环境缓存问题

生产环境可能存在旧代码缓存,导致修改后的逻辑未生效。

解决办法:清除浏览器缓存,或在BuildFire后台重新发布插件,确保最新代码部署生效。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 07:18:19