









结论:[object Object] 这次不是普通的数据格式错误,根因是 V20 填报页运行在 iframe 中,父窗口传入的 Luckysheet JSON 对象和 iframe 内部 Luckysheet 运行时不在同一个 JS 对象域。
问题现象
V20 填报页打开报表时,部分单元格本应显示正常文本或公式结果,却显示成 [object Object]。
同时会出现几个误导点:
所以它表现像“某些单元格值没有格式化”,但实际不是简单的显示格式问题。
问题根因
关键点来自 Luckysheet issue dream-num/Luckysheet#1334 的启发:iframe 跨 JS realm 会导致对象身份判断失效。
V20 的数据流是:
父窗口/宿主页面生成 payload
-> 通过直接调用或消息传给 iframe
-> iframe 内的 Luckysheet 使用这些对象初始化
这里的坑是:
这也是为什么之前一直在 m/v、celldata、flowdata、canvas 刷新上补丁,很难彻底解决。那些都是结果层修补,不是入口处修正对象域。
解决思路
正确收口点是在 luckysheet.create(...) 之前,把宿主传进来的 Luckysheet JSON 重新落到 iframe 当前 JS realm 内。
当前处理是:
function rehomeLuckysheetDataForIframe(data) {
if (!data || typeof data !== 'object') return data;
try {
return JSON.parse(JSON.stringify(data));
} catch (e) {
console.warn('[V20] iframe data rehome failed:', e);
return data;
}
}
调用位置:
sheets = rehomeLuckysheetDataForIframe(sheets);
它的意义不是业务清洗,也不是格式转换,而是“对象重新归属”:让传入 Luckysheet 的所有普通 JSON 对象都变成 iframe 自己上下文里的对象。
防回归要点
一句话总结:
[object Object] 的根因是 iframe 跨对象域导致 Luckysheet 识别单元格对象失败;解决方式是在 Luckysheet 初始化前,把宿主传入的 JSON 深拷贝成 iframe 当前对象域里的数据。
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。