aardio + VBScript 混合开发( 二 )

编写 VBScript 扩展库这里说明一下扩展 VBScript 功能的 aardio 扩展库 web.script.json 是如何写出来的 。
首先需要了解 web.script 不仅仅是可以用于执行 VBScript,也可以用于执行 JavaScript,参考:aardio + JavaScript 快速开发桌面软件,体积小使用系统自带ES6 组件
web.script 在创建脚本解释器时,会检查 web.script.preload 名字空间下的所有扩展对象,先看一下 web.script 的构造函数的相关 aardio 代码:
import com;namespace web;class script {    ctor(language = 'JScript'){{        this.msc = ..com.CreateObject("ScriptControl");        // …… 其他代码省略        this.reset = function(){            this.msc.Reset();            //脚本语言名称转为小写            var lang = ..string.lower(this.msc.Language);            //遍历 web.script.preload 名字空间            for(k,v in self.preload){                //如果扩展对象的 language 表指定了对当前语言启用扩展                if(!v.language || v.language[lang]){                    //执行扩展对象的 code 属性指定的脚本代码                    if(v.code)this.msc.AddCode(v.code);                    //执行扩展对象的 init 函数                    if(v.init)v.init(this.msc);                }            }        }        this.reset();        // …… 其他代码省略    }}}web.script.preload 名字空间下的扩展对象,可选指定以下三个属性:
1、属性 language 可用表对象指定支持哪些语言 。
2、属性 code 可用于指定默认加载的脚本代码 。
3、属性 init 可指定初始化执行的函数 。
然后我们再看一下 web.script.json 扩展库的 aardio 代码:
import web.json;import web.script;namespace web.script.json{};// JavaScript 扩展namespace web.script.preload.json3 {    language = {        javascript = true;        jscript = true;    }    code =  //省略JSON3 源码}// VBScript 扩展namespace web.script.preload.json3vbs {    language = {        vbscript = true;        vbs = true;    }    init = function(msc){        msc.AddObject("JSON",{            parse = function(...){                return ..web.json.parse(...);            };            stringify = function(...){                return  ..web.json.stringify(...)            };        })    }}

经验总结扩展阅读