运行环境:纯本地、不联网
GenUI 小工具最硬核的一条约束,是它的运行环境是纯本地、不联网的。理解这一点,所有后续的「能做什么 / 不能做什么」都由此推导而来。
为什么是纯本地
小工具运行在百度搜索结果这一公共、可控的场景里,平台出于安全与稳定考虑,要求产物自成一体、不对外发起网络请求。这样做的好处是:秒开、稳定、不依赖你的服务器存活,也不会在搜索场景里引入不可控的第三方内容。
被禁止的联网行为
以下动作在产物里一律不允许:
- 运行时
fetch/XMLHttpRequest去拉取远程接口或数据; - 引用外部 CDN 的脚本、样式、字体(如
cdn.jsdelivr.net、Google Fonts); - 用
iframe嵌入外部站点,或任何「跳转到外部网站」的行为; - 加载远程图片(
http(s)://...外链图)。
实战教训:最初想把
wanxiangyundang.top直接「打开」做成小工具,被平台明确禁止(development-rules 禁外链 / iframe / 跳转)。正确路线是改为「内置数据快照 + 本地交互」。
数据从哪来:内置快照
既然不能联网,需要展示的内容就要提前抓取、内置进产物。实战中的做法是:
- 万象云档书目速查:用站点
sitemap/books-0.xml(约 2960 条 URL)+ 分类探索页/explore?cid=X&page=N(每页 24 本)抓取,生成一份数据快照data.json(15 个分类 × 前 30 本 = 440 本,约 29.8KB),直接打包进产物。 - 工具类应用:算法全部本地实现(如二维码生成、个税计算),不依赖任何远程服务。
不能做的,用「本地替代」解决
| 想做的事 | 禁止做法 | 合规替代 |
|---|---|---|
| 展示远程内容 | 外链 / iframe | 内置数据快照 |
| 用现成库 | CDN 引脚本 | 离线内联库代码 |
| 用漂亮字体 | Google Fonts | 系统字体 / 内置 woff2 |
| 算一个结果 | 调远程 API | 本地算法实现 |
小结
纯本地不联网不是限制,而是小工具「小而美、秒开稳」的设计基石。开发时请始终问自己:这块内容 / 这个能力,能不能不联网也跑起来? 能,才合规。
