快速开始
插件就是一个 HTML 文件。三段脚本各跑各的上下文,每段用自己的全局变量。
本页你将学到
- 一个三上下文插件的完整骨架;
- 三个全局变量分别出现在哪段脚本里;
- meta 字段与硬限制;
- 怎么确认自己跑在哪个层。
30 秒上手
html
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<meta name="wad:package" content="my-first">
<meta name="wad:name" content="我的第一个插件">
<meta name="wad:version" content="1.0.0">
<meta name="wad:author" content="you">
<meta name="wad:description" content="三上下文演示">
</head>
<body>
<!-- ① 面板:浮窗 WebView 里跑(有 wadPanelLayer SDK,无 wx;SDK 由宿主自动注入) -->
<button id="go">调逻辑层</button>
<script>
wadPanelLayer.ready.then(function () {
document.getElementById('go').onclick = function () {
// 跨层调用统一走 wadPanelLayer.logicLayer,call 可变参
wadPanelLayer.logicLayer.call('add', 1, 2).then(function (r) {
wadPanelLayer.ui.toast('1+2=' + r);
});
};
});
</script>
<!-- ② 逻辑层:appservice V8 里跑(有 wx,无 DOM) -->
<script type="text/wad-logic">
wadLogicLayer.register('add', function (a, b) { return a + b; });
wadLogicLayer.onAttach(function (appid) {
wadLogicLayer.log('注入到 ' + appid);
});
</script>
<!-- ③ 渲染层:当前页面 XWeb 里跑(有 DOM,无 wx) -->
<script type="text/wad-render">
wadRenderLayer.dom.render(function (doc) {
var t = doc.createElement('div');
t.textContent = '插件已注入';
doc.body.appendChild(t);
});
</script>
</body>
</html>三段脚本与 SDK 的关系:
| 段 | 全局变量 | 运行位置 | SDK 来源 |
|---|---|---|---|
面板 <script> | wadPanelLayer | 浮窗 WebView | 宿主自动注入,不用写 <script src> |
text/wad-logic | wadLogicLayer | 业务 V8 上下文 | 宿主在核心之后内联注入 |
text/wad-render | wadRenderLayer | 页面 WebView | 同上 |
安装
三种方式,入口都是插件页右上角「+」:
| 方式 | 操作 |
|---|---|
| 粘贴 HTML | 工具 → 插件 → 「+」→ 粘贴 |
| 远程 URL | 「+」→ 填 URL |
| 本地文件 / zip | 「+」→ 选择文件(市场分发同理) |
小程序内入口:打开任意小程序 → 右上角「…」→「插件」。
meta 字段
| 字段 | 必填 | 说明 |
|---|---|---|
wad:package | 是 | 唯一包名,[A-Za-z0-9][A-Za-z0-9._-]{0,63},升级覆盖同包名 |
wad:name | 否 | 显示名,默认「未命名插件」 |
wad:version | 否 | 版本名字符串,默认 1.0.0 |
wad:versionCode | 否 | 整数版本号(市场判断更新用),默认 1 |
wad:author | 否 | 作者 |
wad:description | 否 | 一句话介绍 |
wad:logo | 否 | data: URL(≤128KB)/ http(s) 图片 / zip 内文件名 |
wad:appids | 否 | 生效小程序白名单(逗号分隔或 *) |
README:zip 根目录 README.md,或单 HTML 内 <script type="text/markdown">…</script>。
硬限制
| 项 | 限制 |
|---|---|
| 单文件 HTML | ≤ 2MB |
text/wad-logic / text/wad-render | 各 ≤ 256KB |
| 同时启用插件 | ≤ 120 个 |
| 单条总线消息 | 面板 SDK 出站 ≤200KB;宿主入站上限 256KB |
外部 <script src> | 不支持(用 wadPanelLayer.assets.script() 加载插件自带资产) |
语法预检
安装前会做 Chromium 语法预检:所有内联脚本先 new Function(src) 编译,SyntaxError → E_SYNTAX,不落盘。
调试
| 手段 | 说明 |
|---|---|
log(...) | 三层都写到 App「插件」页日志面板 |
| 运行时异常 | 只影响该插件(逻辑层连续失败 2 次、渲染层 3 次自动停注入,下一代会重试) |
| 面板样式 | 固定亮色(宿主注入 /ui/plugin-base.css) |
| 确认所在层 | 读全局变量的 layer + instanceId(见 核心 API) |
js
console.log(wadPanelLayer.layer, wadPanelLayer.instanceId); // 'panel' 'c12…'