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

如何使用bookmarklet修改Scratch项目中的变量值

Scratch 项目变量写入方案

核心实现思路

Scratch 3 运行时的虚拟机实例默认暴露在全局上下文,不需要通过已被移除的 Blockly 相关接口操作,直接操作虚拟机实例即可完成变量读写,性能和稳定性都远优于 DOM 读写方案。

操作步骤

1. 获取虚拟机实例

运行以下代码拿到当前页面的 Scratch 虚拟机对象,兼容直接打开的 Scratch 项目页面和内嵌 iframe 加载的项目:

const vm = window.vm ?? Array.from(document.querySelectorAll('iframe')).find(iframe => iframe.contentWindow?.vm)?.contentWindow.vm;

返回值不为空即为获取成功。

2. 修改变量值

修改全局(舞台)变量

全局变量归属于舞台对象,示例代码如下:

// 找到舞台实例
const stage = vm.runtime.targets.find(target => target.isStage);
// 按变量名查找对应变量对象,替换「你的变量名」为实际的Scratch变量名
const targetVariable = Object.values(stage.variables).find(item => item.name === '你的变量名');
// 写入新值,支持数字、字符串等Scratch支持的变量类型
if (targetVariable) targetVariable.value = '你需要写入的内容';

写入完成后Scratch的变量监视器会自动同步更新,项目内的积木可以直接读取到修改后的值。

修改角色私有变量

如果要操作的是角色私有变量,先找到对应角色实例再执行变量查找即可:

// 按角色名查找实例,替换「你的角色名」为实际的角色名称
const roleTarget = vm.runtime.targets.find(target => target.sprite.name === '你的角色名');
// 后续变量查找和写入逻辑和全局变量一致
const targetVariable = Object.values(roleTarget.variables).find(item => item.name === '你的变量名');
if (targetVariable) targetVariable.value = '要写入的内容';

注意事项

  • 变量名大小写敏感,查找时需要和Scratch项目内设置的变量名完全匹配
  • 该方案仅适用于Scratch 3.x版本的项目,不兼容旧版Scratch 2.0项目

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 02:54:01