运行环境:纯本地、不联网

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 本地算法实现

小结

纯本地不联网不是限制,而是小工具「小而美、秒开稳」的设计基石。开发时请始终问自己:这块内容 / 这个能力,能不能不联网也跑起来? 能,才合规。