Scratch-vm dispatch
0. Unofficial extension
dispatch 是什么 需要从scratch的插件的设计方案说起
https://github.com/LLK/scratch-vm/blob/develop/docs/extensions.md#types-of-extensions
官方设计了4类插件,Core以及Team分别是scratch默认的动作、外观等积木和扩展库中音乐、画笔等积木,offical 也许是指的写有合作者tag的插件(但是这些插件并非如列表中所描述的在sandbox中运行)。
我们要关注的是最后这一类 Unoffical, 这类仅提供了对sandbox 的支持。
文档中提到了对于这类插件插件是可以获得一个异步代理的对象,但我这估计是个TODO,或者被暂时搁置了,源码中并没有这块实现 (这里挖个坑)
https://github.com/LLK/scratch-vm/blob/develop/src/extension-support/extension-manager.js#L158
在这份源码中可以看到,在未匹配到builtinExtension后,会进入加载worker的流程(sandbox),但是官方并没有提供可进入这个分支的入口。得益于开源的优势,已有不少二次开发的版本提供了这项功能。
https://turbowarp.org/editor?extension=https://extensions.turbowarp.org/fetch.js
注: turbo
打开后就可以看到动态添加的插件
对应这个插件的代码
点击GET积木块后便可以获得上面 get 方法Promise中的返回值
这样子就可以独立于scratch,编写scratch插件了!