支持与禁止的能力清单

基于纯本地不联网这一总约束,GenUI 规范(development-rules)明确列出了「支持什么、禁止什么」。这份清单是 genui check 的主要判据,也是开发时最常对照的红线表。

支持的能力

在本地范围内,你可以自由使用:

  • 本地计算与渲染:任意 HTML/CSS/JS,canvas 绘图,SVG。
  • 内置资源:把图片、字体(woff/woff2)、JSON 数据打进产物包。
  • 剪贴板写入:navigator.clipboard.writeText(...) 是合规的(注意:读取剪贴板才被禁,写入允许)。
  • 官方组件与图标:照搬 assets/components/ 里的控件,使用 cos-icon 字体图标。
  • 打点:通过 window.genui.sendLog 上报交互事件。
  • 离线算法:如二维码编码、个税公式、混色计算等。

禁止的能力(红线)

以下任何一项出现在产物里都会被判违规:

  1. 产物外网络:运行时联网、外链图、远程接口。
  2. 运行时生成代码:eval、new Function、动态执行字符串。
  3. 本地存储:localStorage、IndexedDB、Cookie 持久化。
  4. 用户设备访问:读取通讯录、文件、定位等。
  5. 越出展示区:内容超出规定的小工具展示画布。
  6. 后台二进制:Worker、WASM、后台大量二进制处理。
  7. 第三方脚本 / CDN:任何外部 script 标签(src 外链)、外部样式、外部字体。
  8. iframe / 跳转:套外部站、打开外部网站。
  9. 系统弹窗:alert / confirm / prompt。

两个最容易被忽视的坑

坑一:剪贴板「写」可以,「读」不行

很多工具需要「复制结果给用户」。navigator.clipboard.writeText(url) 写入剪贴板是允许的——万象云档速查正是用它在用户点书目时把直达链接写进剪贴板,再由用户去浏览器粘贴打开。但反过来,主动读取剪贴板内容是被禁的。方向别搞反。

坑二:「直接打开网站」是头号雷

想把已有网站做成小工具,直觉是「套个 iframe 或直接跳转」。这在 GenUI 里明确被禁。正确姿态是:把网站的核心数据/功能重新实现为本地小工具,而不是套壳。

小结

记住一句口诀:本地能算的都行,往外伸手的全禁。开发时每用一个 API,先对照这张清单问一句「它往外伸手了吗?」——没伸手,就安全。