Skip to content

开发文档

solstice23 edited this page Jan 20, 2023 · 8 revisions

哇居然真的有人看这个开发文档 感动

开始

示例项目地址

Tips: 按下F12可以直接打开开发者控制台

BetterNCM目录

该文件夹在本用户文件夹下,可以点击BetterNCM设置下的Open Folder打开

打开后 一般会看见两个文件夹:pluginsplugins_runtime

其中plugins文件夹是放置打包后的插件的,而plugins_runtime是运行时自动生成的插件解压后的文件夹。

你可以直接解压plugins文件夹内的任意.plugin文件来了解插件的结构

在开发时,你可以在BetterNCM目录下创建一个plugins_dev文件夹,该文件夹内的插件会自动重载,且不会在网易云关闭时被删除。

插件的基本结构

一般,一个插件需要至少两个文件:manifest.json和一个js文件。

其中,manifest.json的结构如下

{
    "manifest_version": 1, // manifest 版本,必为 1
    "name": "ExamplePlugin", // 插件名
    "slug": "example-plugin", // 插件唯一识别名(英文、数字、横杠与下划线) (留空则根据插件名自动生成)(如果插件名有中文请填写该字段)
    "version": "0.1.0", // 插件版本,推荐使用语义化版本(https://semver.org/)
    "betterncm_version": ">=1.0.0", // 依赖的 BetterNCM 版本
    "author": "Author", // 插件作者
    "author_link": "https://example.com", // 作者链接(可选)
    "description": "Description of the plugin", // 插件描述
    "preview": "preview.png", // 插件预览图
    "type": "extension", // 插件类型(可选):extension (默认) | theme | dependency"
    "requirements": ["example-dependency"], // 依赖的插件(可选)


    "injects": { // 普通注入
        "Main": [  // 网易云主页面
            {
                "file": "main.js"  // 需注入的文件
            }
        ]
    },
    "hijacks": {  // 网易云请求修改(可选)
        "> 2.10.0 <= 2.10.6": {  // 版本,支持Range
            "orpheus://orpheus/pub/core.e5842f1.js": { // URL,开头部分匹配即可
            //(如 orpheus://orpheus/pub/core.e5842f1.js?abcdefg 将被匹配到)

                "type":"replace", // 类型,目前支持 replace 和 regex
                "from":"var o;if(((this.U()||C).from||C).id==t)", // 搜索项
                "to":";expose(a);var o;if(((this.U()||C).from||C).id==t)" // 替换为
            }
        }
    },
    "native_plugin": "native.dll", // 需要注入的 native dll (可选)(接口参考已有  native 插件)
}

在BetterNCM0.2.2后,你还可以创建一个startup_script.js,该文件内的代码会早于任何网易云自身代码注入,但是不会有plugins api

Plugins API

在每个注入的js文件中,你都可以调用plugin.onLoad(async p => {})plugin.onConfig(tools => {})来执行实际代码和渲染设置界面。

plugin.onLoad(async p => {}) 中,pplugin内有一些与本插件相关的信息,如当前地址等。

plugin.onConfig(tools => {}) 返回一个HTMLElement,会在设置页中显示。tools中有一些帮助创建HTMLElement的工具。

BetterNCM API

你可以调用BetterNCM API来实现一些如文件操作的基本功能。

在控制台中输入betterncm以查看全部api (又懒得写文档了)

Clone this wiki locally