Skip to content

变量管理模块与 JS-Slash-Runner 冲突,导致数组/对象变量被错误序列化为 JSON 字符串 #42

@hajimi-kun

Description

@hajimi-kun

Description / 问题描述

在同时开启 LittleWhiteBox (小白X) 的“变量管理”模块和 JS-Slash-Runner (酒馆助手) 时,小白X 的变量守护逻辑会错误地将原本属于 JavaScript 数组(Array)或对象(Object)类型的变量转换为压缩后的 JSON 字符串。

这导致其他依赖该变量对象的插件(如 JS-Slash-Runner)无法正常访问属性(例如 var[0].url 会失效,因为变量变成了字符串)。

Steps to Reproduce / 复现步骤

在酒馆中通过脚本或 JS-Slash-Runner 创建一个数组变量(例如:phone_camera_gallery)。
确认该变量在 JS-Slash-Runner 面板中显示为可展开的数组对象。
开启小白X的“变量管理”模块并打开其变量面板。
观察变量的变化:原本的数组对象被转换成了 JSON 字符串。
Expected Behavior / 预期行为
小白X 的变量劫持逻辑应该保持变量的原始引用类型(Live Object/Array),而不应该在 api.set 过程中将其强制 Stringify。

Actual Behavior / 实际行为

变量从:

[
{ "url": "...", "content": "..." },
{ "url": "...", "content": "..." }
]
变成了压缩后的字符串:
[{"url":"...","content":"..."},{"url":"...","content":"..."}]

Technical Analysis / 技术分析

经过初步排查,问题可能出在 scripts/extensions/third-party/LittleWhiteBox/modules/variables/variables-core.js 中的 installVariableApiPatch 函数。

小白X 劫持了 ctx.variables.local.set 等 API。在执行 guardValidate 或内部处理流程中,逻辑可能未能正确识别 Array 类型,或者在尝试“规范化”路径时误触发了序列化逻辑,导致最终存入酒馆变量池的是字符串而非原始对象。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions