Scratch-vm dispatch

0.  Unofficial extension

dispatch 是什么 需要从scratch的插件的设计方案说起

Untitled

https://github.com/LLK/scratch-vm/blob/develop/docs/extensions.md#types-of-extensions

官方设计了4类插件,Core以及Team分别是scratch默认的动作、外观等积木和扩展库中音乐、画笔等积木,offical 也许是指的写有合作者tag的插件(但是这些插件并非如列表中所描述的在sandbox中运行)。

我们要关注的是最后这一类 Unoffical, 这类仅提供了对sandbox 的支持。

Untitled

文档中提到了对于这类插件插件是可以获得一个异步代理的对象,但我这估计是个TODO,或者被暂时搁置了,源码中并没有这块实现 (这里挖个坑)

https://github.com/LLK/scratch-vm/blob/develop/src/extension-support/extension-manager.js#L158

Untitled

在这份源码中可以看到,在未匹配到builtinExtension后,会进入加载worker的流程(sandbox),但是官方并没有提供可进入这个分支的入口。得益于开源的优势,已有不少二次开发的版本提供了这项功能。

https://turbowarp.org/editor?extension=https://extensions.turbowarp.org/fetch.js

注: turbo

打开后就可以看到动态添加的插件

Untitled

对应这个插件的代码

Untitled

点击GET积木块后便可以获得上面 get 方法Promise中的返回值

这样子就可以独立于scratch,编写scratch插件了!