feat(dnfs): 前端代码节点支持完整HTML/CSS/JS并注入当前页面

将内联 JS 节点扩展为内联前端代码节点:内容存完整 HTML 文档,
运行后解析注入当前页面——style 注入 head、script 在全局作用域执行
可操作整页加特效、body 渲染到节点下方容器,console 输出捕获到下方。
This commit is contained in:
qing committed 2026-08-04 22:24:33 +08:00
1 parent ec3df34b43
commit 30360cb106
6 files changed
+62 -20

No files matched your search

+1 -1
View File
@@ -59,7 +59,7 @@ Authorization: Bearer <base64_payload>_<rsa_sign>
| `_sp` | 信封字段 | 前端表现 |
|-------|---------|---------|
| `link` | `url`(http/https,≤2048)、`note?` | favicon 图标(经 static `/api/favicon` 代理拉取)+ 可点击链接 |
| `js` | `code`(≤512KB)、`note?` | "审计源码"(纯文本展示)+ "运行"(在当前页面上下文执行,可施加特效;console 输出捕获到下方)按钮 |
| `js` | `code`(完整 HTML/CSS/JS 文档,≤512KB)、`note?` | "审计源码"(纯文本展示)+ "运行"(解析完整 HTML 文档注入当前页面:style 注入 head、script 在全局作用域执行可加特效、body 渲染到节点下方;console 输出捕获到下方)按钮 |
| `image` | `name`、`data`(`data:image/` DataURL,≤3.5M 字符)、`note?` | 图片直接显示 |
| `file` | `name`、`mime`、`data`(Base64,≤3.5M 字符)、`note?` | 下载按钮(Base64→Blob→下载) |
+2 -2
View File
@@ -248,9 +248,9 @@ def _validate_sp(sp):
elif t == 'js':
code = sp.get('code', '')
if not isinstance(code, str) or not code.strip():
raise DnfsExp('JS 代码不能为空', 400)
raise DnfsExp('前端代码不能为空', 400)
if len(code) > _SP_MAX_CODE:
raise DnfsExp('JS 代码过大(上限 512KB)', 400)
raise DnfsExp('前端代码过大(上限 512KB)', 400)
elif t == 'image':
data = sp.get('data', '')
if not isinstance(data, str) or not data.startswith('data:image/'):