Canvas 主题
Canvas 主题可以完全重写公开状态页的布局、交互与图表。入口 HTML 运行在 sandbox="allow-scripts" 且没有 allow-same-origin 的 iframe 中,受独立 CSP 约束。
与 CSS 主题的区别
| 能力 | CSS 主题 | Canvas 主题 |
|---|---|---|
| 布局 | 宿主 DOM | 完全自绘 |
| 数据 | 宿主已有 DOM | nie-sla:status 快照 + 受限历史请求 |
| 资源 | 宿主页面加载 | ZIP 内自带(字体、图片、脚本、样式) |
| 高度 | 页面自身 | 400–12000,可运行时更新 |
Manifest
json
{
"schema": "nie-sla-theme-v1",
"id": "example-canvas",
"name": "Example Canvas",
"version": "1.0.0",
"type": "theme",
"mode": "canvas",
"entry": "index.html",
"permissions": ["status:read"],
"height": 1000,
"author": "Developer",
"description": "A full-layout NIE-SLA theme.",
"license": "MIT",
"files": ["manifest.json", "index.html", "theme.js", "assets/logo.webp"]
}permissions 必须且只能是 ["status:read"]。height 是初始高度,可在运行时通过消息协议更新。
权限边界
Canvas 主题不能直接 fetch 外网、读取宿主 DOM、Cookie 或 Web Storage、提交表单、打开顶层导航、创建 Worker 或嵌套 frame。字体、图片、代码与样式全部随 ZIP 提供。它也不能读取 Admin API、Agent Token、通知配置或 Cloudflare 绑定。status:read 只表示可通过宿主代理读取公开 status、checks、metrics、pings、latency,不是任意 URL 读取权限。
验收场景
- 无目标、单目标、目标数量很多与超长名称。
- Cloudflare 探测故障但 Agent 在线,以及相反状态。
warnings[]非空、历史为空、温度字段缺失。- 320/375/768/1440 像素宽度无 iframe 内横向溢出。
prefers-reduced-motion、键盘焦点、对比度与屏幕阅读器状态。- 请求超时、HTTP 429、主题重新加载与重复状态快照。
- 动态高度被限制在
400–12000后仍能访问全部内容。
完整消息格式见消息协议。