Skip to content
On this page

概述

JS 脚本可以用于自定义请求,常用于修改请求和回复。

注册清单

和插件类似,脚本也有相同的依赖规则,如果不清楚可以去查看插件前面的章节。

其中,hookUrls 为自定义的拦截器,regex为正则表达式,匹配 API 终结点,exportFunctionName 为对应的函数名

json
{
    "name":"DemoScript",
    "clsid":"7d6d690f-9bc8-4556-84b6-de78cda25ca0",
    "author":"EpicMo",
    "version":"1.0.0",
    "description":"This is a demo js description",
    "coreRelative":"v1",
    "relativeChains":[
    ],
    "hookUrls":[
        {
            "regex":".*emg.epicmo.cn.*",
            "exportFunctionName":"emgEdit"
        }
    ],
    "exportCommand":[
        {
            "command":"calcMusic163Sign [s1] [s2] <s3>",
            "description":"Calc Music163 Request Sign",
            "exportFunctionName":"music163hook"
        }
    ]
}

编写脚本

脚本也被称为 HookUrl 的执行器,用于处理请求。脚本的函数签名是确定的,如下:

js
(callback, request) => { //参数需要保持一致
        //request是序列化之后的对象
        var response = {
            "UUID":"uuid", //需要和request的UUID保持一致
            "DstIpAddr":"22", //重定向Ip
            "DstIpPort":"80", //重定向端口
            "ResponseText":"editedAny" //修改Raw Text
        }
        callback(null, response); //前面是错误的执行结果,后面是修改后给出的response
}

函数的传入参数,和结束语句是确定的,也就是你必须具有(callback, request)的签名和callback(null, response)的回调。

在一个JS脚本中,以导出的方式对应声明:

js
module.exports = {
    "emgEdit":(callback, request) => { //参数需要保持一致
        //request是序列化之后的对象
        var response = {
            "UUID":"uuid", //需要和request的UUID保持一致
            "DstIpAddr":"22", //重定向Ip
            "DstIpPort":"80", //重定向端口
            "ResponseText":"editedAny" //修改Raw Text
        }
        callback(null, response); //前面是错误的执行结果,后面是修改后给出的response
    }
}

因此,emgEdit这个 HookUrl 便和函数绑定了。

导出命令

同样的,JS 脚本也可以提供命令,这个命令会被注册进入 Netife 的函数库,供其他插件调用,其中也可以包含C++等跨语言插件。

其函数原型和拦截器一样,只不过request为命令参数组成的 JSON 文本。

Released under the GPLV3 License.